67 lines · cpp
1// Test to ensure instrumentation of logical operator RHS True/False counters2// are being instrumented for branch coverage3 4// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -main-file-name branch-logical-mixed.cpp %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck -allow-deprecated-dag-overlap %s5 6 7// CHECK: @[[FUNC:__profc__Z4funcv]] = {{.*}} global [61 x i64] zeroinitializer8 9 10// CHECK-LABEL: @_Z4funcv()11bool func() {12 bool bt0 = true;13 bool bt1 = true;14 bool bt2 = true;15 bool bt3 = true;16 bool bt4 = true;17 bool bt5 = true;18 bool bf0 = false;19 bool bf1 = false;20 bool bf2 = false;21 bool bf3 = false;22 bool bf4 = false;23 bool bf5 = false;24 25 bool a = bt0 &&26 bf0 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 1027 bt1 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 828 bf1 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 629 bt2 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 430 bf2; // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 231 32 bool b = bt0 ||33 bf0 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 2034 bt1 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 1835 bf1 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 1636 bt2 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 1437 bf2; // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 1238 39 bool c = (bt0 &&40 bf0) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 2741 (bt1 &&42 bf1) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 2943 (bt2 &&44 bf2) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 3145 (bt3 &&46 bf3) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 3347 (bt4 &&48 bf4) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 3549 (bf5 &&50 bf5); // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 3751 52 bool d = (bt0 ||53 bf0) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 4454 (bt1 ||55 bf1) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 4656 (bt2 ||57 bf2) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 4858 (bt3 ||59 bf3) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 5060 (bt4 ||61 bf4) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 5262 (bt5 ||63 bf5); // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 5464 65 return a && b && c && d;66}67