From f834bcd659ec8c74587712fe74e4251312733b69 Mon Sep 17 00:00:00 2001 From: John McCall Date: Fri, 20 Aug 2010 00:17:19 +0000 Subject: Mangle explicit template arguments in dependent or overloaded names. llvm-svn: 111591 --- clang/test/CodeGenCXX/mangle.cpp | 45 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) (limited to 'clang/test/CodeGenCXX/mangle.cpp') diff --git a/clang/test/CodeGenCXX/mangle.cpp b/clang/test/CodeGenCXX/mangle.cpp index c7a6e0096bd..55357c7d63a 100644 --- a/clang/test/CodeGenCXX/mangle.cpp +++ b/clang/test/CodeGenCXX/mangle.cpp @@ -551,10 +551,10 @@ namespace test17 { template A func(void); - // CHECK: define i32 @_ZN6test174testEv() + // CHECK: define void @_ZN6test174testEv() // CHECK: call {{.*}} @_ZN6test174funcINS_1BEEENS_1AIXszclsrT_3fooEEEEv() - int test() { - func(); // { dg-error "sorry, unimplemented" } + void test() { + func(); } } @@ -585,3 +585,42 @@ namespace test18 { // CHECK: define weak_odr void @_ZN6test181fINS_1AEEEvNS_1SIXadsrT_mlEEE // CHECK: define weak_odr void @_ZN6test181fINS_1AEEEvNS_1SIXadsrT_anEEE } + +// rdar://problem/8332117 +namespace test19 { + struct A { + template int f(); + int operator+(); + operator int(); + template int operator-(); + }; + + template struct S {}; + + template void g (S<&T::template f >) {} + template void g (S<&T::operator+ >) {} + template void g (S<&T::operator int>) {} + template void g (S<&T::template operator- >) {} + + // CHECK: define weak_odr void @_ZN6test191gINS_1AEEEvNS_1SIXadsrT_1fIiEEEE( + template void g(S<&A::f >); + // CHECK: define weak_odr void @_ZN6test191gINS_1AEEEvNS_1SIXadsrT_plEEE( + template void g(S<&A::operator+>); + // CHECK: define weak_odr void @_ZN6test191gINS_1AEEEvNS_1SIXadsrT_cviEEE( + template void g(S<&A::operator int>); + // CHECK: define weak_odr void @_ZN6test191gINS_1AEEEvNS_1SIXadsrT_miIdEEEE( + template void g(S<&A::operator- >); +} + +namespace test20 { + template T *f(const T&); + template T *f(T*); + + // CHECK: define weak_odr void @_ZN6test205test0IiEEvDTcl1fIPT_ELi0EEE( + template void test0(decltype(f(0))) {} + template void test0(decltype(f(0))); + + // CHECK: define weak_odr void @_ZN6test205test1IiEEvDTcl1fIEcvT__EEE( + template void test1(decltype(f<>(T()))) {} + template void test1(decltype(f<>(int()))); +} -- cgit v1.2.3