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