[PATCH] D17567: [GCC] PR23529 Sema part of attrbute abi_tag support

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Mon Mar 7 07:27:17 PST 2016


aaron.ballman added inline comments.

================
Comment at: docs/ItaniumMangleAbiTags.rst:2
@@ +1,3 @@
+========
+Abi Tags
+========
----------------
ABI tags (since it's an acronym). Elsewhere as well.

================
Comment at: docs/ItaniumMangleAbiTags.rst:30
@@ +29,3 @@
+
+All tags that are "active" on a <unqualified-name> are emitted after the
+<unqualified-name>, before <template-args> or <discriminator>, and are part of
----------------
an <unqualified-name>

================
Comment at: docs/ItaniumMangleAbiTags.rst:49
@@ +48,3 @@
+
+A namespace has never any active tags; for types (class / struct / union /
+enum) the explicit tags are the active tags.
----------------
A namespace does not have any active tags.

================
Comment at: docs/ItaniumMangleAbiTags.rst:50
@@ +49,3 @@
+A namespace has never any active tags; for types (class / struct / union /
+enum) the explicit tags are the active tags.
+
----------------
Comma after "enum)".

================
Comment at: docs/ItaniumMangleAbiTags.rst:52
@@ +51,3 @@
+
+For variables and functions the active tags are the explicit tags plus any
+"required tags" which are not in the "available tags" set:
----------------
Comma after "functions".

================
Comment at: docs/ItaniumMangleAbiTags.rst:68
@@ +67,3 @@
+Otherwise the function requires any implicit or explicit tag used in the name
+for the return type.
+
----------------
Code examples for these might be useful for the reader.

================
Comment at: docs/ItaniumMangleAbiTags.rst:79
@@ +78,3 @@
+All tags used in the prefix and in the template arguments for a name are
+available; for functions also all  tags from the <bare-function-type> (which
+might include the return type for template functions) are available.
----------------
Separate into two sentences instead of using a semicolon.

"Also, for functions, all tags from the..."

================
Comment at: docs/ItaniumMangleAbiTags.rst:83
@@ +82,3 @@
+For <local-name>s all active tags used in the local part (<function-
+encoding>) are available, but not implicit tags which were not active!
+
----------------
Replace the ! with a .

Also, an example might be useful for the reader.

================
Comment at: docs/ItaniumMangleAbiTags.rst:89
@@ +88,3 @@
+Example: a cast operator to std::string (which is
+std::__cxx11::basic_string<...>) will use 'cxx11' as active tag, as it is
+required from the return type `std::string` but not available.
----------------
as an active tag.

================
Comment at: include/clang/Basic/AttrDocs.td:1965
@@ +1964,3 @@
+The ``abi_tag`` attribute can be applied to a function, variable, class or
+inline namespace declaration to modify mangled name of the entity. It allows
+to distinguish different versions of the same entity but with different ABI
----------------
to modify the mangled name

================
Comment at: include/clang/Basic/AttrDocs.td:1966
@@ +1965,3 @@
+inline namespace declaration to modify mangled name of the entity. It allows
+to distinguish different versions of the same entity but with different ABI
+version supported. For example, newer version of a class could have more or less
----------------
the ability to distinguish between different versions

================
Comment at: include/clang/Basic/AttrDocs.td:1967
@@ +1966,3 @@
+to distinguish different versions of the same entity but with different ABI
+version supported. For example, newer version of a class could have more or less
+data members and thus have different size. Using the ``abi_tag`` attribute it is
----------------
versions supported.

a newer version of a class could have a different set of data members

================
Comment at: include/clang/Basic/AttrDocs.td:1968
@@ +1967,3 @@
+version supported. For example, newer version of a class could have more or less
+data members and thus have different size. Using the ``abi_tag`` attribute it is
+possible to have different mangled name for a global variable of the class type.
----------------
a different size. 

Comma after attribute.

================
Comment at: include/clang/Basic/AttrDocs.td:1969
@@ +1968,3 @@
+data members and thus have different size. Using the ``abi_tag`` attribute it is
+possible to have different mangled name for a global variable of the class type.
+Therefor old code could keep using old manged name and new code will use new
----------------
names

================
Comment at: include/clang/Basic/AttrDocs.td:1970
@@ +1969,3 @@
+possible to have different mangled name for a global variable of the class type.
+Therefor old code could keep using old manged name and new code will use new
+mangled name with tags.
----------------
Therefore, (note the comma)

the old mangled name

will use the new

================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:2465
@@ -2465,1 +2464,3 @@
+  "variables, enums, fields and typedefs|"
+  "structs, classes, variables, functions and inline namespaces}1">,
   InGroup<IgnoredAttributes>;
----------------
Comma after functions.

================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:4179
@@ +4178,3 @@
+def err_abi_tag_on_redeclaration : Error<
+  "cannot add 'abi_tag' attribute in redeclaration">;
+def err_new_abi_tag_on_redeclaration : Error<
----------------
in a redeclaration


http://reviews.llvm.org/D17567





More information about the cfe-commits mailing list