]> granicus.if.org Git - clang/commitdiff
Add a testcase to show that temporaries from the initializer list are destroyed corre...
authorSebastian Redl <sebastian.redl@getdesigned.at>
Sun, 19 Feb 2012 12:27:51 +0000 (12:27 +0000)
committerSebastian Redl <sebastian.redl@getdesigned.at>
Sun, 19 Feb 2012 12:27:51 +0000 (12:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150924 91177308-0d34-0410-b5e6-96231b3b80d8

test/CodeGenCXX/cxx0x-initializer-stdinitializerlist.cpp

index ef7af88297af30937db0102ea044432a78a01420..a1c4167261bde52abdfd41e18a742e623d4270af 100644 (file)
@@ -58,12 +58,17 @@ struct destroyme1 {
 struct destroyme2 {
   ~destroyme2();
 };
+struct witharg1 {
+  witharg1(const destroyme1&);
+  ~witharg1();
+};
 
 
 void fn2() {
   // CHECK: define void @_Z3fn2v
   void target(std::initializer_list<destroyme1>);
   // objects should be destroyed before dm2, after call returns
+  // CHECK: call void @_Z6targetSt16initializer_listI10destroyme1E
   target({ destroyme1(), destroyme1() });
   // CHECK: call void @_ZN10destroyme1D1Ev
   destroyme2 dm2;
@@ -78,3 +83,28 @@ void fn3() {
   // CHECK: call void @_ZN10destroyme2D1Ev
   // CHECK: call void @_ZN10destroyme1D1Ev
 }
+
+void fn4() {
+  // CHECK: define void @_Z3fn4v
+  void target(std::initializer_list<witharg1>);
+  // objects should be destroyed before dm2, after call returns
+  // CHECK: call void @_ZN8witharg1C1ERK10destroyme1
+  // CHECK: call void @_Z6targetSt16initializer_listI8witharg1E
+  target({ witharg1(destroyme1()), witharg1(destroyme1()) });
+  // CHECK: call void @_ZN8witharg1D1Ev
+  // CHECK: call void @_ZN10destroyme1D1Ev
+  destroyme2 dm2;
+  // CHECK: call void @_ZN10destroyme2D1Ev
+}
+
+void fn5() {
+  // CHECK: define void @_Z3fn5v
+  // temps should be destroyed before dm2
+  // objects should be destroyed after dm2
+  // CHECK: call void @_ZN8witharg1C1ERK10destroyme1
+  auto list = { witharg1(destroyme1()), witharg1(destroyme1()) };
+  // CHECK: call void @_ZN10destroyme1D1Ev
+  destroyme2 dm2;
+  // CHECK: call void @_ZN10destroyme2D1Ev
+  // CHECK: call void @_ZN8witharg1D1Ev
+}