rsmith added a comment.

Thank you! I'm happy with this implementation (other than some data structure 
improvements), and cxx-abi-dev discussion seems to be settling on this approach 
(mangling the return type / variable type to extract attributes) being the 
right one.

(Minor nit: please make sure that your comments start with a capital letter and 
end in a period.)


================
Comment at: lib/AST/ItaniumMangle.cpp:352-355
@@ +351,6 @@
+          UsedAbiTags.insert(Tag);
+          if (std::find(TagList.begin(), TagList.end(), Tag) == TagList.end()) 
{
+            // don't insert duplicates
+            TagList.push_back(Tag);
+          }
+        }
----------------
You're going to sort the result list anyway, so how about adding the tag here 
without checking if it's already present, then using `std::unique` to weed out 
duplicates after you sort?

================
Comment at: lib/AST/ItaniumMangle.cpp:679-683
@@ +678,7 @@
+  // Get tags from return type that are not present in function name or 
encoding
+  AbiTagList AdditionalAbiTags;
+  for (const auto &Tag : ReturnTypeAbiTags) {
+    if (!FunctionEncodingMangler.AbiTagsRoot.getUsedAbiTags().count(Tag))
+      AdditionalAbiTags.push_back(Tag);
+  }
+
----------------
Instead of keeping the `UsedAbiTags` as a `SmallSetVector`, you can just keep a 
`SmallVector` of them, and sort/unique it here. Since you keep the list of 
emitted ABI tags sorted, you can then use `std::set_difference` to extract the 
additional tags in linear time.


http://reviews.llvm.org/D18035



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to