brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · c024887 Raw
94 lines · cpp
1// RUN: %clang -x c++ -fsanitize=implicit-bitfield-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-BITFIELD-CONVERSION2// RUN: %clang -x c++ -fsanitize=implicit-integer-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK3// RUN: %clang -x c++ -fsanitize=implicit-conversion -target x86_64-linux -S -emit-llvm -o - %s | FileCheck %s --check-prefixes=CHECK,CHECK-BITFIELD-CONVERSION4 5struct S {6  int a:3;7  char b:2;8};9 10class C : public S {11  public:12    short c:3;13};14 15S s;16C c;17 18// CHECK-LABEL: define{{.*}} void @{{.*foo1.*}}19void foo1(int x) {20  s.a = x;21  // CHECK: store i8 %{{.*}}22  // CHECK-BITFIELD-CONVERSION: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 523  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 524  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3225  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion26  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize27  c.a = x;28  // CHECK: store i8 %{{.*}}29  // CHECK-BITFIELD-CONVERSION: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 530  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 531  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3232  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion33  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize34  // CHECK-BITFIELD-CONVERSION: [[CONT]]:35  // CHECK-NEXT: ret void36}37 38// CHECK-LABEL: define{{.*}} void @{{.*foo2.*}}39void foo2(int x) {40  s.b = x;41  // CHECK: store i8 %{{.*}}42  // CHECK-BITFIELD-CONVERSION: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 643  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 644  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion45  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize46  c.b = x;47  // CHECK: store i8 %{{.*}}48  // CHECK-BITFIELD-CONVERSION: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 649  // CHECK-BITFIELD-CONVERSION-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 650  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion51  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize52  // CHECK-BITFIELD-CONVERSION: [[CONT]]:53  // CHECK-NEXT: ret void54}55 56// CHECK-LABEL: define{{.*}} void @{{.*foo3.*}}57void foo3() {58  s.a++;59  // CHECK: store i8 %{{.*}}60  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 561  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 562  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3263  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion64  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize65  c.a++;66  // CHECK: store i8 %{{.*}}67  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 568  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 569  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3270  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion71  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize72  // CHECK-BITFIELD-CONVERSION: [[CONT]]:73  // CHECK-NEXT: ret void74}75 76// CHECK-LABEL: define{{.*}} void @{{.*foo4.*}}77void foo4(int x) {78  s.a += x;79  // CHECK: store i8 %{{.*}}80  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 581  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 582  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3283  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion84  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize85  c.a += x;86  // CHECK: store i8 %{{.*}}87  // CHECK-NEXT: [[BFRESULTSHL:%.*]] = shl i8 {{.*}}, 588  // CHECK-NEXT: [[BFRESULTASHR:%.*]] = ashr i8 [[BFRESULTSHL]], 589  // CHECK-NEXT: [[BFRESULTCAST:%.*]] = sext i8 [[BFRESULTASHR]] to i3290  // CHECK-BITFIELD-CONVERSION: call void @__ubsan_handle_implicit_conversion91  // CHECK-BITFIELD-CONVERSION-NEXT: br label %[[CONT:.*]], !nosanitize92  // CHECK-BITFIELD-CONVERSION: [[CONT]]:93  // CHECK-NEXT: ret void94}