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
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits