diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:02:28 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-04-16 16:02:28 +0000 |
commit | 7442d6faa2719e4e7d33a7021c406c5a4facd74d (patch) | |
tree | c72b9241553fc9966179aba84f90f17bfa9235c3 /test/CodeGenCXX/ubsan-bitfields.cpp | |
parent | b52119637f743680a99710ce5fdb6646da2772af (diff) |
Notes
Diffstat (limited to 'test/CodeGenCXX/ubsan-bitfields.cpp')
-rw-r--r-- | test/CodeGenCXX/ubsan-bitfields.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/CodeGenCXX/ubsan-bitfields.cpp b/test/CodeGenCXX/ubsan-bitfields.cpp new file mode 100644 index 000000000000..5595db013db0 --- /dev/null +++ b/test/CodeGenCXX/ubsan-bitfields.cpp @@ -0,0 +1,34 @@ +// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=bool,enum | FileCheck %s + +enum E { + a = 1, + b = 2, + c = 3 +}; + +struct S { + E e1 : 10; +}; + +// CHECK-LABEL: define i32 @_Z4loadP1S +E load(S *s) { + // CHECK: [[LOAD:%.*]] = load i16, i16* {{.*}} + // CHECK: [[CLEAR:%.*]] = and i16 [[LOAD]], 1023 + // CHECK: [[CAST:%.*]] = zext i16 [[CLEAR]] to i32 + // CHECK: icmp ule i32 [[CAST]], 3, !nosanitize + // CHECK: call void @__ubsan_handle_load_invalid_value + return s->e1; +} + +struct Bool { + bool b1 : 1; + bool b2 : 7; + bool b3 : 16; +}; + +// CHECK-LABEL: define zeroext i1 @_Z13load_cpp_boolP4Bool +bool load_cpp_bool(Bool *b) { + // CHECK-NOT: call void @__ubsan_handle_load_invalid_value + // CHECK-NOT: !nosanitize + return b->b1 || b->b2 || b->b3; +} |