diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-13 07:11:50 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2012-12-13 07:11:50 +0000 |
commit | 1629da95fe78ae4cf8b66496aaddbe06bbbe2a90 (patch) | |
tree | 5a34556442992e7739142d643958ac6465955ce1 /clang/test/CodeGen/catch-undef-behavior.c | |
parent | 32952215b6c304a3858c9c8a74e84880b7bc9c34 (diff) | |
download | bcm5719-llvm-1629da95fe78ae4cf8b66496aaddbe06bbbe2a90.tar.gz bcm5719-llvm-1629da95fe78ae4cf8b66496aaddbe06bbbe2a90.zip |
ubsan: Add -fsanitize=bool and -fsanitize=enum, which check for loads of
bit-patterns which are not valid values for enumerated or boolean types.
These checks are the ubsan analogue of !range metadata.
llvm-svn: 170108
Diffstat (limited to 'clang/test/CodeGen/catch-undef-behavior.c')
-rw-r--r-- | clang/test/CodeGen/catch-undef-behavior.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/test/CodeGen/catch-undef-behavior.c b/clang/test/CodeGen/catch-undef-behavior.c index 5af957c9893..088e3a9e0f0 100644 --- a/clang/test/CodeGen/catch-undef-behavior.c +++ b/clang/test/CodeGen/catch-undef-behavior.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsanitize=alignment,null,object-size,shift,return,signed-integer-overflow,vla-bound,float-cast-overflow,integer-divide-by-zero -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s +// RUN: %clang_cc1 -fsanitize=alignment,null,object-size,shift,return,signed-integer-overflow,vla-bound,float-cast-overflow,integer-divide-by-zero,bool -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s // RUN: %clang_cc1 -fsanitize=null -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK-NULL // RUN: %clang_cc1 -fsanitize=signed-integer-overflow -emit-llvm %s -o - -triple x86_64-linux-gnu | FileCheck %s --check-prefix=CHECK-OVERFLOW @@ -246,3 +246,11 @@ int int_divide_overflow(int a, int b) { // CHECK: } // CHECK-OVERFLOW: } } + +// CHECK: @sour_bool +_Bool sour_bool(_Bool *p) { + // CHECK: %[[OK:.*]] = icmp ule i8 {{.*}}, 1 + // CHECK: br i1 %[[OK]] + // CHECK: call void @__ubsan_handle_load_invalid_value_abort(i8* bitcast ({{.*}}), i64 {{.*}}) + return *p; +} |