brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.5 KiB · 61d7634 Raw
61 lines · c
1// RUN: %clang -fsanitize=implicit-bitfield-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-BITFIELD-CONVERSION2// RUN: %clang -fsanitize=implicit-integer-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK3// RUN: %clang -fsanitize=implicit-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-BITFIELD-CONVERSION4 5typedef struct _xx {6  int x1:3;7  char x2:2;8} xx, *pxx;9 10xx vxx;11 12// CHECK-LABEL: define{{.*}} void @foo113void foo1(int x) {14  vxx.x1 = x;15  // CHECK: store i8 %{{.*}}16  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 517  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 518  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3219  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion20  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize21  // CHECK-BITFIELD-CONVERSION: [[CONT]]:22  // CHECK-NEXT: ret void23}24 25// CHECK-LABEL: define{{.*}} void @foo226void foo2(int x) {27  vxx.x2 = x;28  // CHECK: store i8 %{{.*}}29  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 630  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 631  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion32  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize33  // CHECK-BITFIELD-CONVERSION: [[CONT]]:34  // CHECK-NEXT: ret void35}36 37// CHECK-LABEL: define{{.*}} void @foo338void foo3() {39  vxx.x1++;40  // CHECK: store i8 %{{.*}}41  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 542  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 543  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3244  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion45  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize46  // CHECK-BITFIELD-CONVERSION: [[CONT]]:47  // CHECK-NEXT: ret void48}49 50// CHECK-LABEL: define{{.*}} void @foo451void foo4(int x) {52  vxx.x1 += x;53  // CHECK: store i8 %{{.*}}54  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 555  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 556  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3257  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion58  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize59  // CHECK-BITFIELD-CONVERSION: [[CONT]]:60  // CHECK-NEXT: ret void61}