xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGen/bounds-checking.c (revision f4a2713ac843a11c696ec80c0a5e3e5d80b4d338)
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 Sambuc double 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 Sambuc void 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 Sambuc void f3() {
26*f4a2713aSLionel Sambuc   int a[1];
27*f4a2713aSLionel Sambuc   // CHECK: call {{.*}} @llvm.trap
28*f4a2713aSLionel Sambuc   a[2] = 1;
29*f4a2713aSLionel Sambuc }
30