| // 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); |
| } |