diff options
author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2012-02-19 12:28:02 +0000 |
---|---|---|
committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2012-02-19 12:28:02 +0000 |
commit | af130fd78267ee9e2395b758a7d827b07ce317a0 (patch) | |
tree | cc6928871b65c3a0ba84312e073fc6cb9b334825 /test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp | |
parent | bac5cf4110c1c9ba0992fad4fd9f66cedc27f3da (diff) |
Get recursive initializer lists to work and add a test. Codegen of std::initializer_list is now complete. Onward to array new.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150926 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp')
-rw-r--r-- | test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp index 79d2073759..7dc5503c96 100644 --- a/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp +++ b/test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp @@ -136,3 +136,31 @@ void fn7() { // CHECK: call void @_ZN10destroyme2D1Ev // CHECK: call void @_ZN10wantslist1D1Ev } + +void fn8() { + // CHECK: define void @_Z3fn8v + void target(std::initializer_list<std::initializer_list<destroyme1>>); + // objects should be destroyed before dm2, after call returns + // CHECK: call void @_Z6targetSt16initializer_listIS_I10destroyme1EE + std::initializer_list<destroyme1> inner; + target({ inner, { destroyme1() } }); + // CHECK: call void @_ZN10destroyme1D1Ev + // Only one destroy loop, since only one inner init list is directly inited. + // CHECK-NOT: call void @_ZN10destroyme1D1Ev + destroyme2 dm2; + // CHECK: call void @_ZN10destroyme2D1Ev +} + +void fn9() { + // CHECK: define void @_Z3fn9v + // objects should be destroyed after dm2 + std::initializer_list<destroyme1> inner; + std::initializer_list<std::initializer_list<destroyme1>> list = + { inner, { destroyme1() } }; + destroyme2 dm2; + // CHECK: call void @_ZN10destroyme2D1Ev + // CHECK: call void @_ZN10destroyme1D1Ev + // Only one destroy loop, since only one inner init list is directly inited. + // CHECK-NOT: call void @_ZN10destroyme1D1Ev + // CHECK: ret void +} |