8 This text tries to describe gcc semantic for mangling "abi_tag" attributes
9 described in https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html
11 There is no guarantee the following rules are correct, complete or make sense
12 in any way as they were determined empirically by experiments with gcc5.
17 ABI tags are declared in an abi_tag attribute and can be applied to a
18 function, variable, class or inline namespace declaration. The attribute takes
19 one or more strings (called tags); the order does not matter.
21 See https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html for
24 Tags on an inline namespace are called "implicit tags", all other tags are
30 All tags that are "active" on an <unqualified-name> are emitted after the
31 <unqualified-name>, before <template-args> or <discriminator>, and are part of
32 the same <substitution> the <unqualified-name> is.
38 <abi-tags> ::= <abi-tag>* # sort by name
39 <abi-tag> ::= B <tag source-name>
45 __attribute__((abi_tag("test")))
47 // gets mangled as: _Z4FuncB4testv (prettified as `Func[abi:test]()`)
52 A namespace does not have any active tags. For types (class / struct / union /
53 enum), the explicit tags are the active tags.
55 For variables and functions, the active tags are the explicit tags plus any
56 "required tags" which are not in the "available tags" set:
60 derived-tags := (required-tags - available-tags)
61 active-tags := explicit-tags + derived-tags
63 Required tags for a function
64 ============================
66 If a function is used as a local scope for another name, and is part of
67 another function as local scope, it doesn't have any required tags.
69 If a function is used as a local scope for a guard variable name, it doesn't
70 have any required tags.
72 Otherwise the function requires any implicit or explicit tag used in the name
80 inline namespace B __attribute__((abi_tag)) {
85 A::C foo(); // gets mangled as: _Z3fooB1Bv (prettified as `foo[abi:B]()`)
87 Required tags for a variable
88 ============================
90 A variable requires any implicit or explicit tag used in its type.
95 All tags used in the prefix and in the template arguments for a name are
96 available. Also, for functions, all tags from the <bare-function-type>
97 (which might include the return type for template functions) are available.
99 For <local-name>s all active tags used in the local part (<function-
100 encoding>) are available, but not implicit tags which were not active.
102 Implicit and explicit tags used in the <unqualified-name> for a function (as
103 in the type of a cast operator) are NOT available.
105 Example: a cast operator to std::string (which is
106 std::__cxx11::basic_string<...>) will use 'cxx11' as an active tag, as it is
107 required from the return type `std::string` but not available.