================
@@ -83,10 +85,29 @@ struct DOTGraphTraitsViewer
   StringRef Name;
 };
 
+static void shortenFileName(std::string &FN, unsigned char len = 250) {
+
+  FN = FN.substr(0, len);
+  if (nameObj.empty())
+    nameObj.push_back(FN);
+
+  else {
+    for (auto it = nameObj.begin(); it != nameObj.end(); it++) {
+      if (*it == FN) {
+        FN = FN.substr(0, --len);
----------------
DrTodd13 wrote:

Let's say that I have 3 filenames submitted in a row that share the same first 
250 characters.  Line 92 will add the first one truncated to 250.  Then, line 
97 will add the second one truncated to 249.  But then, for the third one, the 
first time through the nameObj list, it is going to match with the first name 
you added, decrement len by 1 and then add to nameObj.  So, I think the 2nd and 
3rd names in your list are going to be duplicates.

Maybe a more classic way of doing this would be to use a set instead of a list, 
check if the FN truncated to 250 is in the set and if not add it.  If it is 
then truncate to 249 and repeat the process of checking if it is in the set.  
Add if it isn't and if it is then truncate to 248 and keep repeating the 
process until it can be added.  Of course, this approach has the problem that 
if you have more than 250 names that shared the first 250 characters then len 
would go to 0 and you'd try to have a filename that was empty.  Then the 251st 
time you tried it you'd have a negative substr len.  If that is equivalent to 0 
len then you could end up in an infinite loop.

https://github.com/llvm/llvm-project/pull/72654
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to