17143325db76d6c3dabce82500f8cc7c93a941970John McCall// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s 20fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregorstruct X { 30fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor X(); 40fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor ~X(); 50fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor}; 60fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor 70fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregorstruct Y { 80fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor Y(); 90fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor ~Y(); 100fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor}; 110fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor 120fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor// CHECK: define void @_Z1fiPPKc( 130fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregorvoid f(int argc, const char* argv[]) { 140fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call void @_ZN1XC1Ev 150fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor X x; 160fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call i8* @llvm.stacksave( 170fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor const char *argv2[argc]; 180fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call void @_ZN1YC1Ev 190fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor Y y; 200fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor for (int i = 0; i != argc; ++i) 210fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor argv2[i] = argv[i]; 220fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor 230fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call void @_ZN1YD1Ev 240fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call void @llvm.stackrestore 250fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: call void @_ZN1XD1Ev 260fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor // CHECK: ret void 270fddb97901dbe36a8253dee29961cba8e0a87cf6Douglas Gregor} 2801f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman 2901f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedmannamespace PR11744 { 3001f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman // Make sure this doesn't crash; there was a use-after-free issue 3101f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman // for this testcase. 3201f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman template<typename T> int f(int n) { 3301f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman T arr[3][n]; 3401f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman return 3; 3501f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman } 3601f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman int test = f<int>(0); 3701f276dac946c0845f6eb3449ab253cfdba841a1Eli Friedman} 38