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