diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 07:47:09 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-02-18 07:47:09 +0000 |
commit | 906d41ab2ef81ff361197b69100faa77540d15ce (patch) | |
tree | 0cd54e6c4997181168e112116881711588d19ab6 /test/CodeGenCXX/mangle-template.cpp | |
parent | b279682bcd79c70baecb312e0db0f0e019eee2bf (diff) |
Itanium ABI: Mangle <mangled-name> according to the ABI
We attempted to be compatible with GCC's buggy mangling for templates
with a declaration for a template argument.
However, we weren't completely successful in copying their bug in cases
like:
char foo;
template <char &C> decltype(C) f() { return foo; };
template char &f<foo>();
Instead, just follow the ABI specification. This fixes PR22621.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@229644 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/mangle-template.cpp')
-rw-r--r-- | test/CodeGenCXX/mangle-template.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/test/CodeGenCXX/mangle-template.cpp b/test/CodeGenCXX/mangle-template.cpp index 998096a57b..28db27173e 100644 --- a/test/CodeGenCXX/mangle-template.cpp +++ b/test/CodeGenCXX/mangle-template.cpp @@ -4,7 +4,7 @@ namespace test1 { int x; template <int& D> class T { }; -// CHECK: void @_ZN5test12f0ENS_1TILZNS_1xEEEE( +// CHECK: void @_ZN5test12f0ENS_1TIL_ZNS_1xEEEE( void f0(T<x> a0) {} } @@ -12,7 +12,7 @@ namespace test1 { // CHECK: void @_ZN5test12f0Ef void f0(float) {} template<void (&)(float)> struct t1 {}; -// CHECK: void @_ZN5test12f1ENS_2t1ILZNS_2f0EfEEE( +// CHECK: void @_ZN5test12f1ENS_2t1IL_ZNS_2f0EfEEE( void f1(t1<f0> a0) {} } @@ -49,11 +49,11 @@ int main(int) {} namespace test5 { template<void (&)(float)> struct t1 {}; -// CHECK: void @_ZN5test52f1ENS_2t1ILZ8test5_f0EEE( +// CHECK: void @_ZN5test52f1ENS_2t1IL_Z8test5_f0EEE( void f1(t1<test5_f0> a0) {} template<int (&)(int)> struct t2 {}; -// CHECK: void @_ZN5test52f2ENS_2t2ILZ4mainEEE +// CHECK: void @_ZN5test52f2ENS_2t2IL_Z4mainEEE void f2(t2<main> a0) {} } @@ -164,11 +164,11 @@ namespace test12 { void use() { // CHECK-LABEL: define internal void @_ZN6test124testIFivEXadL_ZNS_L1fEvEEEEvv( test<int(), &f>(); - // CHECK-LABEL: define internal void @_ZN6test124testIRFivELZNS_L1fEvEEEvv( + // CHECK-LABEL: define internal void @_ZN6test124testIRFivEL_ZNS_L1fEvEEEvv( test<int(&)(), f>(); // CHECK-LABEL: define internal void @_ZN6test124testIPKiXadL_ZNS_L1nEEEEEvv( test<const int*, &n>(); - // CHECK-LABEL: define internal void @_ZN6test124testIRKiLZNS_L1nEEEEvv( + // CHECK-LABEL: define internal void @_ZN6test124testIRKiL_ZNS_L1nEEEEvv( test<const int&, n>(); } } |