35 lines · cpp
1// RUN: %clang_cc1 -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -o - %s -fsanitize=bool,enum | FileCheck %s2 3enum E {4 a = 1,5 b = 2,6 c = 37};8 9struct S {10 E e1 : 10;11};12 13// CHECK-LABEL: define{{.*}} i32 @_Z4loadP1S14E load(S *s) {15 // CHECK: [[LOAD:%.*]] = load i16, ptr {{.*}}16 // CHECK: [[CLEAR:%.*]] = and i16 [[LOAD]], 102317 // CHECK: [[CAST:%.*]] = zext i16 [[CLEAR]] to i3218 // CHECK: icmp ule i32 [[CAST]], 3, !nosanitize19 // CHECK: call void @__ubsan_handle_load_invalid_value20 return s->e1;21}22 23struct Bool {24 bool b1 : 1;25 bool b2 : 7;26 bool b3 : 16;27};28 29// CHECK-LABEL: define{{.*}} zeroext i1 @_Z13load_cpp_boolP4Bool30bool load_cpp_bool(Bool *b) {31 // CHECK-NOT: call void @__ubsan_handle_load_invalid_value32 // CHECK-NOT: !nosanitize33 return b->b1 || b->b2 || b->b3;34}35