// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s | |
struct X { | |
X(); | |
~X(); | |
}; | |
struct Y { | |
Y(); | |
~Y(); | |
}; | |
// CHECK-LABEL: define void @_Z1fiPPKc( | |
void f(int argc, const char* argv[]) { | |
// CHECK: call void @_ZN1XC1Ev | |
X x; | |
// CHECK: call i8* @llvm.stacksave( | |
const char *argv2[argc]; | |
// CHECK: call void @_ZN1YC1Ev | |
Y y; | |
for (int i = 0; i != argc; ++i) | |
argv2[i] = argv[i]; | |
// CHECK: call void @_ZN1YD1Ev | |
// CHECK: call void @llvm.stackrestore | |
// CHECK: call void @_ZN1XD1Ev | |
// CHECK: ret void | |
} | |
namespace PR11744 { | |
// Make sure this doesn't crash; there was a use-after-free issue | |
// for this testcase. | |
template<typename T> int f(int n) { | |
T arr[3][n]; | |
return 3; | |
} | |
int test = f<int>(0); | |
} |