_ZN1N4NameB4testIiEEvv
void N::Name[abi:test]<int>()
void N::Name[abi:test]<int>()
g++-5 | /home/stefan/src/llvm-build/bin/clang++ | |
---|---|---|
explicit mangled template function | ||
namespace N { template<typename X> __attribute__((abi_tag("test"))) void Name() { } template void Name<int>(); } |
_ZN1N4NameB4testIiEEvv void N::Name[abi:test]<int>() |
_ZN1N4NameB4testIiEEvv void N::Name[abi:test]<int>() |
explicit mangled template function | ||
namespace N { template<typename X> __attribute__((abi_tag("test"))) void Name() { } struct __attribute__((abi_tag("test"))) Y { }; template void Name<Y>(); } |
_ZN1N4NameB4testINS_1YB4testEEEvv void N::Name[abi:test]<N::Y[abi:test]>() |
_ZN1N4NameB4testINS_1YB4testEEEvv void N::Name[abi:test]<N::Y[abi:test]>() |
typedef anonymous struct type as template parameter | ||
namespace N { template<typename X> __attribute__((abi_tag("test"))) void Name(X) { } typedef struct { int a; } Y; Y X; void foo() { Name(X); } } |
_ZN1N4NameB4testINS_1YEEEvT_ void N::Name[abi:test]<N::Y>(N::Y) |
_ZN1N4NameB4testINS_1YEEEvT_ void N::Name[abi:test]<N::Y>(N::Y) |
operator with abi tag | ||
namespace N { struct Name; struct S { __attribute__((abi_tag("test"))) S& operator=(Name const&); }; S& S::operator=(Name const&) { return *this; } } |
_ZN1N1SaSB4testERKNS_4NameE N::S::operator=[abi:test](N::Name const&) |
_ZN1N1SaSB4testERKNS_4NameE N::S::operator=[abi:test](N::Name const&) |
cast operator to struct with abi tag | ||
namespace N { struct __attribute__((abi_tag("test"))) Name { }; struct S { operator Name(); }; S::operator Name() { return Name(); } } |
_ZN1N1ScvNS_4NameB4testEB4testEv N::S::operator N::Name[abi:test][abi:test]() |
_ZN1N1ScvNS_4NameB4testEB4testEv N::S::operator N::Name[abi:test][abi:test]() |
std::string variable | ||
namespace std { template<typename CharT> struct char_traits { }; template<typename T> struct allocator { }; inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { template< class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>> struct basic_string { basic_string(); basic_string(const CharT*); }; using string = basic_string<char>; } } namespace N { std::string Name; } |
_ZN1N4NameB5cxx11E N::Name[abi:cxx11] |
_ZN1N4NameB5cxx11E N::Name[abi:cxx11] |
template variable explicit tag (C++-14) | ||
namespace N { template<typename T> __attribute__((abi_tag("test"))) T Name = 1; template unsigned int Name<unsigned int>; } |
_ZN1N4NameB4testIjEE N::Name[abi:test]<unsigned int> |
_ZN1N4NameB4testIjEE N::Name[abi:test]<unsigned int> |
template variable implicit tagged type using tagged template parameter (C++-14) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { // clang treats this with "internal linkage" template<typename T> T Name; template std::String Name<std::String>; } |
_ZGVN1N4NameINSt7__cxx116StringEEE
guard variable for N::Name<std::__cxx11::String> _ZN1N4NameINSt7__cxx116StringEEE N::Name<std::__cxx11::String> |
Failed to compile/extract symbols |
template variable implicit tagged type using untagged template parameter (C++-14) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { // clang treats this with "internal linkage" template<typename T> std::String Name; template std::String Name<int>; } |
_ZGVN1N4NameIiEE
guard variable for N::Name<int> _ZN1N4NameIiEE N::Name<int> |
Failed to compile/extract symbols |
cast operator to std::string | ||
namespace std { template<typename CharT> struct char_traits { }; template<typename T> struct allocator { }; inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { template< class CharT, class Traits = std::char_traits<CharT>, class Allocator = std::allocator<CharT>> struct basic_string { basic_string(); basic_string(const CharT*); }; using string = basic_string<char>; } } namespace N { struct Name { operator std::string(); }; Name::operator std::string() { return ""; } } |
_ZN1N4NamecvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEB5cxx11Ev N::Name::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() |
_ZN1N4NamecvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEB5cxx11Ev N::Name::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() |
cast operator to not implicit available tagged struct | ||
namespace N { struct __attribute__((abi_tag("test"))) Result { }; struct Name { operator Result(); }; Name::operator Result() { return Result(); } } |
_ZN1N4NamecvNS_6ResultB4testEB4testEv N::Name::operator N::Result[abi:test][abi:test]() |
_ZN1N4NamecvNS_6ResultB4testEB4testEv N::Name::operator N::Result[abi:test][abi:test]() |
cast operator to implicit available tagged struct | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { }; struct Name { operator Result(); }; Name::operator Result() { return Result(); } } } |
_ZN1N6__test4NamecvNS0_6ResultEEv N::__test::Name::operator N::__test::Result() |
_ZN1N6__test4NamecvNS0_6ResultEEv N::__test::Name::operator N::__test::Result() |
cast operator to implicit tagged struct | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { }; } struct Name { operator Result(); }; Name::operator Result() { return Result(); } } |
_ZN1N4NamecvNS_6__test6ResultEB4testEv N::Name::operator N::__test::Result[abi:test]() |
_ZN1N4NamecvNS_6__test6ResultEB4testEv N::Name::operator N::__test::Result[abi:test]() |
two local variables (visible implicit tag) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { inline void F() { { static std::String Name; } { static std::String Name; } } void F2() { // instantiate F() F(); } } |
_ZGVZN1N1FEvE4Name
guard variable for N::F()::Name _ZGVZN1N1FEvE4Name_0
guard variable for N::F()::Name _ZZN1N1FEvE4NameB5cxx11
N::F()::Name[abi:cxx11] _ZZN1N1FEvE4NameB5cxx11_0 N::F()::Name[abi:cxx11] |
_ZGVZN1N1FEvE4Name
guard variable for N::F()::Name _ZGVZN1N1FEvE4Name_0
guard variable for N::F()::Name _ZZN1N1FEvE4NameB5cxx11
N::F()::Name[abi:cxx11] _ZZN1N1FEvE4NameB5cxx11_0 N::F()::Name[abi:cxx11] |
two local variables (hidden implicit tag) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { inline std::String F() { { static std::String Name; } { static std::String Name; return Name; } } void F2() { // instantiate F() F(); } } |
_ZGVZN1N1FEvE4Name
guard variable for N::F()::Name _ZGVZN1N1FEvE4Name_0
guard variable for N::F()::Name _ZZN1N1FB5cxx11EvE4Name
N::F[abi:cxx11]()::Name _ZZN1N1FB5cxx11EvE4Name_0 N::F[abi:cxx11]()::Name |
_ZGVZN1N1FEvE4Name
guard variable for N::F()::Name _ZGVZN1N1FEvE4Name_0
guard variable for N::F()::Name _ZZN1N1FB5cxx11EvE4Name
N::F[abi:cxx11]()::Name _ZZN1N1FB5cxx11EvE4Name_0 N::F[abi:cxx11]()::Name |
two local variables in template function (visible implicit tag) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { template<typename T> void F() { { static std::String Name; } { static std::String Name; } } template void F<int>(); } |
_ZGVZN1N1FIiEEvvE4Name
guard variable for void N::F<int>()::Name _ZGVZN1N1FIiEEvvE4Name_0
guard variable for void N::F<int>()::Name _ZZN1N1FIiEEvvE4NameB5cxx11
void N::F<int>()::Name[abi:cxx11] _ZZN1N1FIiEEvvE4NameB5cxx11_0 void N::F<int>()::Name[abi:cxx11] |
_ZGVZN1N1FIiEEvvE4Name
guard variable for void N::F<int>()::Name _ZGVZN1N1FIiEEvvE4Name_0
guard variable for void N::F<int>()::Name _ZZN1N1FIiEEvvE4NameB5cxx11
void N::F<int>()::Name[abi:cxx11] _ZZN1N1FIiEEvvE4NameB5cxx11_0 void N::F<int>()::Name[abi:cxx11] |
two local variables in template function (hidden implicit tag) | ||
namespace std { inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String { String(); }; } } namespace N { template<typename T> std::String F() { { static std::String Name; } { static std::String Name; return Name; } } template std::String F<int>(); } |
_ZGVZN1N1FIiEENSt7__cxx116StringEvE4Name
guard variable for std::__cxx11::String N::F<int>()::Name _ZGVZN1N1FIiEENSt7__cxx116StringEvE4Name_0
guard variable for std::__cxx11::String N::F<int>()::Name _ZZN1N1FIiEENSt7__cxx116StringEvE4NameB5cxx11
std::__cxx11::String N::F<int>()::Name[abi:cxx11] _ZZN1N1FIiEENSt7__cxx116StringEvE4NameB5cxx11_0 std::__cxx11::String N::F<int>()::Name[abi:cxx11] |
_ZGVZN1N1FIiEENSt7__cxx116StringEvE4Name
guard variable for std::__cxx11::String N::F<int>()::Name _ZGVZN1N1FIiEENSt7__cxx116StringEvE4Name_0
guard variable for std::__cxx11::String N::F<int>()::Name _ZZN1N1FIiEENSt7__cxx116StringEvE4NameB5cxx11
std::__cxx11::String N::F<int>()::Name[abi:cxx11] _ZZN1N1FIiEENSt7__cxx116StringEvE4NameB5cxx11_0 std::__cxx11::String N::F<int>()::Name[abi:cxx11] |
local string literals | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { const char *str; }; } inline Result Name(const char *x = "abc") { { static const char *s = "xyz"; // no guard if (s == x) return Result{nullptr}; } { static const char *s = x; // guarded if (s == x) return Result{nullptr}; return Result{s}; } }; void F() { // instantiate Name() Name(nullptr); } } |
_ZGVZN1N4NameEPKcE1s_0
guard variable for N::Name(char const*)::s _ZN1N4NameB4testEPKc
N::Name[abi:test](char const*) _ZZN1N4NameB4testEPKcE1s
N::Name[abi:test](char const*)::s _ZZN1N4NameB4testEPKcE1s_0 N::Name[abi:test](char const*)::s |
_ZGVZN1N4NameEPKcE1s_0
guard variable for N::Name(char const*)::s _ZN1N4NameB4testEPKc
N::Name[abi:test](char const*) _ZZN1N4NameB4testEPKcE1s
N::Name[abi:test](char const*)::s _ZZN1N4NameB4testEPKcE1s_0 N::Name[abi:test](char const*)::s |
static var in method in local struct in method in local struct, one implicit tag in signature | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { const char *str; }; } inline Result Name(Result p1) { struct T { Result F(Result p2) { struct S { Result F(Result p3) { static Result s3 = p3; return s3; } }; static Result s2 = S().F(p2); return s2; } }; static Result s1 = T().F(p1); return s1; } void F() { // instantiate Name() Name(Result()); } } |
_ZGVZN1N4NameENS_6__test6ResultEE2s1
guard variable for N::Name(N::__test::Result)::s1 _ZGVZZN1N4NameENS_6__test6ResultEEN1T1FES1_E2s2
guard variable for N::Name(N::__test::Result)::T::F(N::__test::Result)::s2 _ZGVZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FES1_E2s3
guard variable for N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F(N::__test::Result)::s3 _ZN1N4NameENS_6__test6ResultE
N::Name(N::__test::Result) _ZZN1N4NameENS_6__test6ResultEE2s1B4test
N::Name(N::__test::Result)::s1[abi:test] _ZZN1N4NameENS_6__test6ResultEEN1T1FES1_
N::Name(N::__test::Result)::T::F(N::__test::Result) _ZZZN1N4NameENS_6__test6ResultEEN1T1FES1_E2s2B4test
N::Name(N::__test::Result)::T::F(N::__test::Result)::s2[abi:test] _ZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FES1_
N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F(N::__test::Result) _ZZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FES1_E2s3B4test N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F(N::__test::Result)::s3[abi:test] |
_ZGVZN1N4NameENS_6__test6ResultEE2s1
guard variable for N::Name(N::__test::Result)::s1 _ZGVZZN1N4NameENS_6__test6ResultEEN1T1FES1_E2s2
guard variable for N::Name(N::__test::Result)::T::F(N::__test::Result)::s2 _ZGVZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FES1_E2s3
guard variable for N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F(N::__test::Result)::s3 _ZN1N4NameENS_6__test6ResultE
N::Name(N::__test::Result) _ZZN1N4NameENS_6__test6ResultEE2s1B4test
N::Name(N::__test::Result)::s1[abi:test] _ZZN1N4NameENS_6__test6ResultEEN1T1FB4testES1_
N::Name(N::__test::Result)::T::F[abi:test](N::__test::Result) _ZZZN1N4NameENS_6__test6ResultEEN1T1FES1_E2s2B4test
N::Name(N::__test::Result)::T::F(N::__test::Result)::s2[abi:test] _ZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FB4testES1_
N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F[abi:test](N::__test::Result) _ZZZZN1N4NameENS_6__test6ResultEEN1T1FES1_EN1S1FES1_E2s3B4test N::Name(N::__test::Result)::T::F(N::__test::Result)::S::F(N::__test::Result)::s3[abi:test] |
static var in method in local struct in method in local struct, one implicit tag | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Base { Base(); ~Base(); int state; }; struct Type1 : Base { }; struct Type2 : Base { }; struct Type3 : Base { }; struct String : Base { }; } inline String Name() { struct T { Type3 F() { struct S { Type2 F() { static Type3 state3; static Type2 state2; static Type1 state1; return state2; } }; static Type3 state3; static Type2 state2 = S().F(); static String string; return state3; } }; static Type3 state3 = T().F(); static String result; return result; } void F() { // instantiate Name() Name(); } } |
_ZGVZN1N4NameEvE6result
guard variable for N::Name()::result _ZGVZN1N4NameEvE6state3
guard variable for N::Name()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6state2
guard variable for N::Name()::T::F()::state2 _ZGVZZN1N4NameEvEN1T1FEvE6state3
guard variable for N::Name()::T::F()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6string
guard variable for N::Name()::T::F()::string _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state1
guard variable for N::Name()::T::F()::S::F()::state1 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state2
guard variable for N::Name()::T::F()::S::F()::state2 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state3
guard variable for N::Name()::T::F()::S::F()::state3 _ZN1N4NameB4testEv
N::Name[abi:test]() _ZZN1N4NameB4testEvE6result
N::Name[abi:test]()::result _ZZN1N4NameB4testEvE6state3
N::Name[abi:test]()::state3 _ZZN1N4NameB4testEvEN1T1FEv
N::Name[abi:test]()::T::F() _ZZZN1N4NameB4testEvEN1T1FEvE6state2
N::Name[abi:test]()::T::F()::state2 _ZZZN1N4NameB4testEvEN1T1FEvE6state3
N::Name[abi:test]()::T::F()::state3 _ZZZN1N4NameB4testEvEN1T1FEvE6string
N::Name[abi:test]()::T::F()::string _ZZZN1N4NameB4testEvEN1T1FEvEN1S1FEv
N::Name[abi:test]()::T::F()::S::F() _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state1
N::Name[abi:test]()::T::F()::S::F()::state1 _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state2
N::Name[abi:test]()::T::F()::S::F()::state2 _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state3 N::Name[abi:test]()::T::F()::S::F()::state3 |
_ZGVZN1N4NameEvE6result
guard variable for N::Name()::result _ZGVZN1N4NameEvE6state3
guard variable for N::Name()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6state2
guard variable for N::Name()::T::F()::state2 _ZGVZZN1N4NameEvEN1T1FEvE6state3
guard variable for N::Name()::T::F()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6string
guard variable for N::Name()::T::F()::string _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state1
guard variable for N::Name()::T::F()::S::F()::state1 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state2
guard variable for N::Name()::T::F()::S::F()::state2 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state3
guard variable for N::Name()::T::F()::S::F()::state3 _ZN1N4NameB4testEv
N::Name[abi:test]() _ZZN1N4NameB4testEvE6result
N::Name[abi:test]()::result _ZZN1N4NameB4testEvE6state3
N::Name[abi:test]()::state3 _ZZN1N4NameB4testEvEN1T1FEv
N::Name[abi:test]()::T::F() _ZZZN1N4NameB4testEvEN1T1FEvE6state2
N::Name[abi:test]()::T::F()::state2 _ZZZN1N4NameB4testEvEN1T1FEvE6state3
N::Name[abi:test]()::T::F()::state3 _ZZZN1N4NameB4testEvEN1T1FEvE6string
N::Name[abi:test]()::T::F()::string _ZZZN1N4NameB4testEvEN1T1FEvEN1S1FEv
N::Name[abi:test]()::T::F()::S::F() _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state1
N::Name[abi:test]()::T::F()::S::F()::state1 _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state2
N::Name[abi:test]()::T::F()::S::F()::state2 _ZZZZN1N4NameB4testEvEN1T1FEvEN1S1FEvE6state3 N::Name[abi:test]()::T::F()::S::F()::state3 |
static var in method in local struct in method in local struct, four implicit tags | ||
namespace N { struct Base { Base(); ~Base(); int state; }; inline namespace __test __attribute__((abi_tag("test"))) { struct Type1 : Base { }; } inline namespace __test2 __attribute__((abi_tag("test2"))) { struct Type2 : Base { }; } inline namespace __test3 __attribute__((abi_tag("test3"))) { struct Type3 : Base { }; } inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String : Base { String(); }; } inline String Name() { struct T { Type3 F() { struct S { Type2 F() { static Type3 state3; static Type2 state2; static Type1 state1; return state2; } }; static Type3 state3; static Type2 state2 = S().F(); static String string; return state3; } }; static Type3 state3 = T().F(); static String result; return result; } void F() { // instantiate Name() Name(); } } |
_ZGVZN1N4NameEvE6result
guard variable for N::Name()::result _ZGVZN1N4NameEvE6state3
guard variable for N::Name()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6state2
guard variable for N::Name()::T::F()::state2 _ZGVZZN1N4NameEvEN1T1FEvE6state3
guard variable for N::Name()::T::F()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6string
guard variable for N::Name()::T::F()::string _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state1
guard variable for N::Name()::T::F()::S::F()::state1 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state2
guard variable for N::Name()::T::F()::S::F()::state2 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state3
guard variable for N::Name()::T::F()::S::F()::state3 _ZN1N4NameB5cxx11Ev
N::Name[abi:cxx11]() _ZZN1N4NameB5cxx11EvE6result
N::Name[abi:cxx11]()::result _ZZN1N4NameB5cxx11EvE6state3B5test3
N::Name[abi:cxx11]()::state3[abi:test3] _ZZN1N4NameB5cxx11EvEN1T1FB5test3Ev
N::Name[abi:cxx11]()::T::F[abi:test3]() _ZZZN1N4NameB5cxx11EvEN1T1FEvE6state2B5test2
N::Name[abi:cxx11]()::T::F()::state2[abi:test2] _ZZZN1N4NameB5cxx11EvEN1T1FEvE6state3B5test3
N::Name[abi:cxx11]()::T::F()::state3[abi:test3] _ZZZN1N4NameB5cxx11EvEN1T1FEvE6string
N::Name[abi:cxx11]()::T::F()::string _ZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FB5test2Ev
N::Name[abi:cxx11]()::T::F()::S::F[abi:test2]() _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state1B4test
N::Name[abi:cxx11]()::T::F()::S::F()::state1[abi:test] _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state2B5test2
N::Name[abi:cxx11]()::T::F()::S::F()::state2[abi:test2] _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state3B5test3 N::Name[abi:cxx11]()::T::F()::S::F()::state3[abi:test3] |
_ZGVZN1N4NameEvE6result
guard variable for N::Name()::result _ZGVZN1N4NameEvE6state3
guard variable for N::Name()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6state2
guard variable for N::Name()::T::F()::state2 _ZGVZZN1N4NameEvEN1T1FEvE6state3
guard variable for N::Name()::T::F()::state3 _ZGVZZN1N4NameEvEN1T1FEvE6string
guard variable for N::Name()::T::F()::string _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state1
guard variable for N::Name()::T::F()::S::F()::state1 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state2
guard variable for N::Name()::T::F()::S::F()::state2 _ZGVZZZN1N4NameEvEN1T1FEvEN1S1FEvE6state3
guard variable for N::Name()::T::F()::S::F()::state3 _ZN1N4NameB5cxx11Ev
N::Name[abi:cxx11]() _ZZN1N4NameB5cxx11EvE6result
N::Name[abi:cxx11]()::result _ZZN1N4NameB5cxx11EvE6state3B5test3
N::Name[abi:cxx11]()::state3[abi:test3] _ZZN1N4NameB5cxx11EvEN1T1FB5test3Ev
N::Name[abi:cxx11]()::T::F[abi:test3]() _ZZZN1N4NameB5cxx11EvEN1T1FEvE6state2B5test2
N::Name[abi:cxx11]()::T::F()::state2[abi:test2] _ZZZN1N4NameB5cxx11EvEN1T1FEvE6state3B5test3
N::Name[abi:cxx11]()::T::F()::state3[abi:test3] _ZZZN1N4NameB5cxx11EvEN1T1FEvE6string
N::Name[abi:cxx11]()::T::F()::string _ZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FB5test2Ev
N::Name[abi:cxx11]()::T::F()::S::F[abi:test2]() _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state1B4test
N::Name[abi:cxx11]()::T::F()::S::F()::state1[abi:test] _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state2B5test2
N::Name[abi:cxx11]()::T::F()::S::F()::state2[abi:test2] _ZZZZN1N4NameB5cxx11EvEN1T1FEvEN1S1FEvE6state3B5test3 N::Name[abi:cxx11]()::T::F()::S::F()::state3[abi:test3] |
static var in method in local struct in method in local struct, four tags, explicit tags on functions | ||
namespace N { struct Base { Base(); ~Base(); int state; }; inline namespace __test __attribute__((abi_tag("test"))) { struct Type1 : Base { }; } inline namespace __test2 __attribute__((abi_tag("test2"))) { struct Type2 : Base { }; } inline namespace __test3 __attribute__((abi_tag("test3"))) { struct Type3 : Base { }; } inline namespace __cxx11 __attribute__((abi_tag("cxx11"))) { struct String : Base { }; } __attribute__((abi_tag("cxx11"))) inline String Name() { struct T { __attribute__((abi_tag("test3"))) Type3 F() { struct S { __attribute__((abi_tag("test2"))) Type2 F() { static Type3 state3; static Type2 state2; static Type1 state1; return state2; } }; static Type3 state3; static Type2 state2 = S().F(); static String string; return state3; } }; static Type3 state3 = T().F(); static String result; return result; } void F() { // instantiate Name() Name(); } } |
_ZGVZN1N4NameB5cxx11EvE6result
guard variable for N::Name[abi:cxx11]()::result _ZGVZN1N4NameB5cxx11EvE6state3
guard variable for N::Name[abi:cxx11]()::state3 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state2
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::state2 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state3
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::state3 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6string
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::string _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state1
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state1 _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state2
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state2 _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state3
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state3 _ZN1N4NameB5cxx11Ev
N::Name[abi:cxx11]() _ZZN1N4NameB5cxx11EvE6result
N::Name[abi:cxx11]()::result _ZZN1N4NameB5cxx11EvE6state3B5test3
N::Name[abi:cxx11]()::state3[abi:test3] _ZZN1N4NameB5cxx11EvEN1T1FB5test3Ev
N::Name[abi:cxx11]()::T::F[abi:test3]() _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state2B5test2
N::Name[abi:cxx11]()::T::F[abi:test3]()::state2[abi:test2] _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state3
N::Name[abi:cxx11]()::T::F[abi:test3]()::state3 _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6string
N::Name[abi:cxx11]()::T::F[abi:test3]()::string _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2Ev
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]() _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state1B4test
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state1[abi:test] _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state2
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state2 _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state3 N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state3 |
_ZGVZN1N4NameB5cxx11EvE6result
guard variable for N::Name[abi:cxx11]()::result _ZGVZN1N4NameB5cxx11EvE6state3
guard variable for N::Name[abi:cxx11]()::state3 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state2
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::state2 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state3
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::state3 _ZGVZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6string
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::string _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state1
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state1 _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state2
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state2 _ZGVZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state3
guard variable for N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state3 _ZN1N4NameB5cxx11Ev
N::Name[abi:cxx11]() _ZZN1N4NameB5cxx11EvE6result
N::Name[abi:cxx11]()::result _ZZN1N4NameB5cxx11EvE6state3B5test3
N::Name[abi:cxx11]()::state3[abi:test3] _ZZN1N4NameB5cxx11EvEN1T1FB5test3Ev
N::Name[abi:cxx11]()::T::F[abi:test3]() _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state2B5test2
N::Name[abi:cxx11]()::T::F[abi:test3]()::state2[abi:test2] _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6state3
N::Name[abi:cxx11]()::T::F[abi:test3]()::state3 _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvE6string
N::Name[abi:cxx11]()::T::F[abi:test3]()::string _ZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2Ev
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]() _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state1B4test
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state1[abi:test] _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state2
N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state2 _ZZZZN1N4NameB5cxx11EvEN1T1FB5test3EvEN1S1FB5test2EvE6state3 N::Name[abi:cxx11]()::T::F[abi:test3]()::S::F[abi:test2]()::state3 |
method in local struct, tagged parameter | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { }; } inline Result F(Result) { struct S { Result Name() { return Result(); } }; return S().Name(); } void F2() { // instantiate F() F(Result()); } } |
_ZZN1N1FENS_6__test6ResultEEN1S4NameB4testEv N::F(N::__test::Result)::S::Name[abi:test]() |
_ZZN1N1FENS_6__test6ResultEEN1S4NameB4testEv N::F(N::__test::Result)::S::Name[abi:test]() |
typedef anonymous struct type with abi tag as template parameter | ||
namespace N { template<typename X> __attribute__((abi_tag("test"))) void Name(X) { } typedef struct __attribute__((abi_tag("test"))) { int a; } Y; Y X; void F() { Name(X); } } |
_ZN1N4NameB4testINS_1YB4testEEEvT_ void N::Name[abi:test]<N::Y[abi:test]>(N::Y[abi:test]) |
_ZN1N4NameB4testINS_1YB4testEEEvT_ void N::Name[abi:test]<N::Y[abi:test]>(N::Y[abi:test]) |
call lambda for default argument of struct method | ||
namespace N { struct S { inline void F(int i = []() __attribute__((abi_tag("test"))) { static int Name; return Name++; }()) { } }; void F2() { // instantiate F() S().F(); } } |
_ZZZN1N1S1FEiEd_NKUlvE_clB4testEvE4Name N::S::F(int)::{default arg#1}::{lambda()#1}::operator()[abi:test]() const::Name |
_ZZZN1N1S1FEiEd_NKUlvE_clB4testEvE4Name N::S::F(int)::{default arg#1}::{lambda()#1}::operator()[abi:test]() const::Name |
implicitly tagged return type in template function | ||
namespace N { inline namespace __test __attribute__((abi_tag("test"))) { struct Result { }; } template<typename T> Result Name(T) { return Result(); }; template Result Name<int>(int); } |
_ZN1N4NameIiEENS_6__test6ResultET_ N::__test::Result N::Name<int>(int) |
_ZN1N4NameIiEENS_6__test6ResultET_ N::__test::Result N::Name<int>(int) |