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 | 919ae5fc042719d9f21b2d569e9425b948f7b1f1 (patch) | |
tree | fdb07661bfb68e3611c506031949ace0fcb06767 /test/CodeGenCXX/mangle-exprs.cpp | |
parent | c05af575f52ab7f2f1bc2bbdf247976d8c21c582 (diff) |
Fix mangling for dependent "type { expr-list }" expressions, and add mangling for designated initializers matching recent cxx-abi-dev discussion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311612 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/mangle-exprs.cpp')
-rw-r--r-- | test/CodeGenCXX/mangle-exprs.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/CodeGenCXX/mangle-exprs.cpp b/test/CodeGenCXX/mangle-exprs.cpp index ee7594b2fd..6c46402694 100644 --- a/test/CodeGenCXX/mangle-exprs.cpp +++ b/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); } +} |