1*67e74705SXin Li // RUN: %clang_cc1 -fsanitize=local-bounds -emit-llvm -triple x86_64-apple-darwin10 %s -o - | FileCheck %s 2*67e74705SXin Li // RUN: %clang_cc1 -fsanitize=array-bounds -O -fsanitize-trap=array-bounds -emit-llvm -triple x86_64-apple-darwin10 -DNO_DYNAMIC %s -o - | FileCheck %s 3*67e74705SXin Li 4*67e74705SXin Li // CHECK-LABEL: @f f(int b,int i)5*67e74705SXin Lidouble f(int b, int i) { 6*67e74705SXin Li double a[b]; 7*67e74705SXin Li // CHECK: call {{.*}} @llvm.trap 8*67e74705SXin Li return a[i]; 9*67e74705SXin Li } 10*67e74705SXin Li 11*67e74705SXin Li // CHECK-LABEL: @f2 f2()12*67e74705SXin Livoid f2() { 13*67e74705SXin Li // everything is constant; no trap possible 14*67e74705SXin Li // CHECK-NOT: call {{.*}} @llvm.trap 15*67e74705SXin Li int a[2]; 16*67e74705SXin Li a[1] = 42; 17*67e74705SXin Li 18*67e74705SXin Li #ifndef NO_DYNAMIC 19*67e74705SXin Li short *b = malloc(64); 20*67e74705SXin Li b[5] = *a + a[1] + 2; 21*67e74705SXin Li #endif 22*67e74705SXin Li } 23*67e74705SXin Li 24*67e74705SXin Li // CHECK-LABEL: @f3 f3()25*67e74705SXin Livoid f3() { 26*67e74705SXin Li int a[1]; 27*67e74705SXin Li // CHECK: call {{.*}} @llvm.trap 28*67e74705SXin Li a[2] = 1; 29*67e74705SXin Li } 30