From 39eca9b95ab73f3ad442e4980ea0b12df3c134b8 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 23 Aug 2017 22:12:08 +0000 Subject: Fix mangling for dependent "type { expr-list }" expressions, and add mangling for designated initializers matching recent cxx-abi-dev discussion. llvm-svn: 311612 --- clang/test/CodeGenCXX/mangle-exprs.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'clang/test/CodeGenCXX/mangle-exprs.cpp') 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 decltype(F{{1,2}},T()) fF1(T t) {} template decltype(F({1,2}),T()) fF2(T t) {} + template decltype(T{}) fT1(T t) {} + template decltype(T()) fT2(T t) {} + template decltype(T{1}) fT3(T t) {} + template decltype(T(1)) fT4(T t) {} + template decltype(T{1,2}) fT5(T t) {} + template decltype(T(1,2)) fT6(T t) {} + template decltype(T{{}}) fT7(T t) {} + template decltype(T({})) fT8(T t) {} + template decltype(T{{1}}) fT9(T t) {} + template decltype(T({1})) fTA(T t) {} + template decltype(T{{1,2}}) fTB(T t) {} + template 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(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fTBINS_1CEEEDTtlT_ilLi1ELi2EEEES2_( + fTC(b); // CHECK-LABEL: define {{.*}} @_ZN5test73fTCINS_1CEEEDTcvT_ilLi1ELi2EEES2_( } } @@ -341,3 +366,10 @@ namespace test8 { // CHECK-LABEL: define weak_odr i32 @_ZNK5test81XIiE3barIiEEDTcl3fooIT_EEEv template int X::bar() const; } + +namespace designated_init { + struct A { struct B { int b[5][5]; } a; }; + // CHECK-LABEL: define {{.*}} @_ZN15designated_init1fINS_1AEEEvDTtlT_di1adi1bdxLi3EdXLi1ELi4ELi9EEE( + template void f(decltype(T{.a.b[3][1 ... 4] = 9}) x) {} + void use_f(A a) { f(a); } +} -- cgit v1.2.3