blob: d93cd3ede7d69b47ba2fd9ef8e30ce59b600267c [file] [log] [blame]
Richard Smith6b53e222013-10-22 22:51:04 +00001// RUN: %clang_cc1 -fsanitize=local-bounds -emit-llvm -triple x86_64-apple-darwin10 %s -o - | FileCheck %s
2// 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
Nuno Lopesddcce0b2012-05-09 15:53:34 +00003
Richard Smith6b53e222013-10-22 22:51:04 +00004// CHECK-LABEL: @f
Nuno Lopesddcce0b2012-05-09 15:53:34 +00005double f(int b, int i) {
6 double a[b];
Richard Smith6b53e222013-10-22 22:51:04 +00007 // CHECK: call {{.*}} @llvm.trap
Nuno Lopesddcce0b2012-05-09 15:53:34 +00008 return a[i];
Nuno Lopesddcce0b2012-05-09 15:53:34 +00009}
10
Richard Smith6b53e222013-10-22 22:51:04 +000011// CHECK-LABEL: @f2
Nuno Lopesddcce0b2012-05-09 15:53:34 +000012void f2() {
Nuno Lopesa4255892012-05-22 17:19:45 +000013 // everything is constant; no trap possible
Richard Smith6b53e222013-10-22 22:51:04 +000014 // CHECK-NOT: call {{.*}} @llvm.trap
Nuno Lopesddcce0b2012-05-09 15:53:34 +000015 int a[2];
Nuno Lopesddcce0b2012-05-09 15:53:34 +000016 a[1] = 42;
Richard Smith6b53e222013-10-22 22:51:04 +000017
18#ifndef NO_DYNAMIC
Nuno Lopesddcce0b2012-05-09 15:53:34 +000019 short *b = malloc(64);
Nuno Lopesa4255892012-05-22 17:19:45 +000020 b[5] = *a + a[1] + 2;
Richard Smith6b53e222013-10-22 22:51:04 +000021#endif
Nuno Lopesa4255892012-05-22 17:19:45 +000022}
23
Richard Smith6b53e222013-10-22 22:51:04 +000024// CHECK-LABEL: @f3
Nuno Lopesa4255892012-05-22 17:19:45 +000025void f3() {
26 int a[1];
Richard Smith6b53e222013-10-22 22:51:04 +000027 // CHECK: call {{.*}} @llvm.trap
Nuno Lopesa4255892012-05-22 17:19:45 +000028 a[2] = 1;
Nuno Lopesddcce0b2012-05-09 15:53:34 +000029}