From af130fd78267ee9e2395b758a7d827b07ce317a0 Mon Sep 17 00:00:00 2001 From: Sebastian Redl Date: Sun, 19 Feb 2012 12:28:02 +0000 Subject: 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 --- .../cxx0x-initializer-stdinitializerlist.cpp | 28 ++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp') 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>); + // objects should be destroyed before dm2, after call returns + // CHECK: call void @_Z6targetSt16initializer_listIS_I10destroyme1EE + std::initializer_list 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 inner; + std::initializer_list> 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 +} -- cgit v1.2.3-70-g09d2