[PATCH] D18035: [GCC] PR23529 Mangler part of attrbute abi_tag support

Dmitry Polukhin via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 23 05:44:12 PDT 2016

DmitryPolukhin added inline comments.

Comment at: lib/AST/ItaniumMangle.cpp:321-323
@@ +320,5 @@
+  // track.
+  //
+  // FIXME: how to handle substituted names? They should add the tags used in
+  // the substitution to the list of available tags.
+  class AbiTagState final {
rsmith wrote:
> Do we need to? IIUC, the only time we need this list is when determining the set of "available" tags for a function declaration with a tagged return type, and in that case, a tag can only be available from a substitution if it's also available from the target of that substitution (right?).
It is not only for functions but also for variables but yes, as far as I understand, substitution itself cannot add tags and target should have all tags. I removed FIXME.

Comment at: lib/AST/ItaniumMangle.cpp:348-361
@@ +347,16 @@
+    void pop() {
+      if (!LinkActive)
+        return;
+      assert(LinkHead == this &&
+             "abi tag link head must point to us on destruction");
+      LinkActive = false;
+      if (Parent) {
+        Parent->UsedAbiTags.insert(UsedAbiTags.begin(), UsedAbiTags.end());
+        Parent->EmittedAbiTags.insert(EmittedAbiTags.begin(),
+                                      EmittedAbiTags.end());
+      }
+      LinkHead = Parent;
+    }
rsmith wrote:
> Why do we need a stack of these? It seems like we only need one set of available tags for the complete mangling process (it should only be used once at the top level).
Stack is required for mangling local names. In that case we have more than one list of available tags and it can be enclosed.


More information about the cfe-commits mailing list