Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
      2 struct X {
      3   X();
      4   ~X();
      5 };
      6 
      7 struct Y {
      8   Y();
      9   ~Y();
     10 };
     11 
     12 // CHECK-LABEL: define void @_Z1fiPPKc(
     13 void f(int argc, const char* argv[]) {
     14   // CHECK: call void @_ZN1XC1Ev
     15   X x;
     16   // CHECK: call i8* @llvm.stacksave(
     17   const char *argv2[argc];
     18   // CHECK: call void @_ZN1YC1Ev
     19   Y y;
     20   for (int i = 0; i != argc; ++i)
     21     argv2[i] = argv[i];
     22 
     23   // CHECK: call void @_ZN1YD1Ev
     24   // CHECK: call void @llvm.stackrestore
     25   // CHECK: call void @_ZN1XD1Ev
     26   // CHECK: ret void
     27 }
     28 
     29 namespace PR11744 {
     30   // Make sure this doesn't crash; there was a use-after-free issue
     31   // for this testcase.
     32   template<typename T> int f(int n) {
     33     T arr[3][n];
     34     return 3;
     35   }
     36   int test = f<int>(0);
     37 }
     38