diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-23 22:12:08 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2017-08-23 22:12:08 +0000 |
| commit | 39eca9b95ab73f3ad442e4980ea0b12df3c134b8 (patch) | |
| tree | a3a5a9f108a980b5829119b72303cdf02a0f3e07 /clang/test | |
| parent | 4bafa167481d6eec6535bbc5230535f9973d39e7 (diff) | |
| download | bcm5719-llvm-39eca9b95ab73f3ad442e4980ea0b12df3c134b8.tar.gz bcm5719-llvm-39eca9b95ab73f3ad442e4980ea0b12df3c134b8.zip | |
Fix mangling for dependent "type { expr-list }" expressions, and add mangling for designated initializers matching recent cxx-abi-dev discussion.
llvm-svn: 311612
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGenCXX/mangle-exprs.cpp | 32 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/mangle-fail.cpp | 6 |
2 files changed, 32 insertions, 6 deletions
diff --git a/clang/test/CodeGenCXX/mangle-exprs.cpp b/clang/test/CodeGenCXX/mangle-exprs.cpp index ee7594b2fdd..6c464026940 100644 --- a/clang/test/CodeGenCXX/mangle-exprs.cpp +++ b/clang/test/CodeGenCXX/mangle-exprs.cpp @@ -314,6 +314,19 @@ namespace test7 { template<class T> decltype(F{{1,2}},T()) fF1(T t) {} template<class T> decltype(F({1,2}),T()) fF2(T t) {} + template<class T> decltype(T{}) fT1(T t) {} + template<class T> decltype(T()) fT2(T t) {} + template<class T> decltype(T{1}) fT3(T t) {} + template<class T> decltype(T(1)) fT4(T t) {} + template<class T> decltype(T{1,2}) fT5(T t) {} + template<class T> decltype(T(1,2)) fT6(T t) {} + template<class T> decltype(T{{}}) fT7(T t) {} + template<class T> decltype(T({})) fT8(T t) {} + template<class T> decltype(T{{1}}) fT9(T t) {} + template<class T> decltype(T({1})) fTA(T t) {} + template<class T> decltype(T{{1,2}}) fTB(T t) {} + template<class T> decltype(T({1,2})) fTC(T t) {} + int main() { fA1(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fA1IiEEDTcmtlNS_1AELi1ELi2EEcvT__EES2_ fA2(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fA2IiEEDTcmcvNS_1AEilLi1ELi2EEcvT__EES2_ @@ -327,6 +340,18 @@ namespace test7 { fE2(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fE2IiEEDTcmcvNS_1EEilLi1ELi2EEcvT__EES2_ fF1(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fF1IiEEDTcmtlNS_1FEilLi1ELi2EEEcvT__EES2_ fF2(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fF2IiEEDTcmcvNS_1FEilLi1ELi2EEcvT__EES2_ + fT1(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fT1IiEEDTtlT_EES1_( + fT2(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fT2IiEEDTcvT__EES1_( + fT3(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fT3IiEEDTtlT_Li1EEES1_( + fT4(1); // CHECK-LABEL: define {{.*}} @_ZN5test73fT4IiEEDTcvT_Li1EES1_( + fT5(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fT5INS_1BEEEDTtlT_Li1ELi2EEES2_( + fT6(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fT6INS_1BEEEDTcvT__Li1ELi2EEES2_( + fT7(A{}); // CHECK-LABEL: define {{.*}} @_ZN5test73fT7INS_1AEEEDTtlT_ilEEES2_( + fT8(A{}); // CHECK-LABEL: define {{.*}} @_ZN5test73fT8INS_1AEEEDTcvT_ilEES2_( + fT9(A{}); // CHECK-LABEL: define {{.*}} @_ZN5test73fT9INS_1AEEEDTtlT_ilLi1EEEES2_( + fTA(A{}); // CHECK-LABEL: define {{.*}} @_ZN5test73fTAINS_1AEEEDTcvT_ilLi1EEES2_( + fTB<C>(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fTBINS_1CEEEDTtlT_ilLi1ELi2EEEES2_( + fTC<C>(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fTCINS_1CEEEDTcvT_ilLi1ELi2EEES2_( } } @@ -341,3 +366,10 @@ namespace test8 { // CHECK-LABEL: define weak_odr i32 @_ZNK5test81XIiE3barIiEEDTcl3fooIT_EEEv template int X<int>::bar<int>() const; } + +namespace designated_init { + struct A { struct B { int b[5][5]; } a; }; + // CHECK-LABEL: define {{.*}} @_ZN15designated_init1fINS_1AEEEvDTtlT_di1adi1bdxLi3EdXLi1ELi4ELi9EEE( + template<typename T> void f(decltype(T{.a.b[3][1 ... 4] = 9}) x) {} + void use_f(A a) { f<A>(a); } +} diff --git a/clang/test/CodeGenCXX/mangle-fail.cpp b/clang/test/CodeGenCXX/mangle-fail.cpp index 02548964efc..b588d57749f 100644 --- a/clang/test/CodeGenCXX/mangle-fail.cpp +++ b/clang/test/CodeGenCXX/mangle-fail.cpp @@ -1,6 +1,5 @@ // RUN: %clang_cc1 -emit-llvm-only -x c++ -std=c++11 -triple %itanium_abi_triple -verify %s -DN=1 // RUN: %clang_cc1 -emit-llvm-only -x c++ -std=c++11 -triple %itanium_abi_triple -verify %s -DN=2 -// RUN: %clang_cc1 -emit-llvm-only -x c++ -std=c++11 -triple %itanium_abi_triple -verify %s -DN=3 struct A { int a; }; @@ -14,11 +13,6 @@ template void test<int>(int (&)[sizeof(int)]); template<class T> void test(int (&)[sizeof((A){}, T())]) {} // expected-error {{cannot yet mangle}} template void test<int>(int (&)[sizeof(A)]); -#elif N == 3 -// DesignatedInitExpr -template<class T> void test(int (&)[sizeof(A{.a = 10}, T())]) {} // expected-error {{cannot yet mangle}} -template void test<int>(int (&)[sizeof(A)]); - // FIXME: There are several more cases we can't yet mangle. #else |

