| // Test to ensure instrumentation of logical operator RHS True/False counters |
| // are being instrumented for branch coverage |
| |
| // 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 %s |
| |
| |
| // CHECK: @[[FUNC:__profc__Z4funcv]] = {{.*}} global [61 x i64] zeroinitializer |
| |
| |
| // CHECK-LABEL: @_Z4funcv() |
| bool func() { |
| bool bt0 = true; |
| bool bt1 = true; |
| bool bt2 = true; |
| bool bt3 = true; |
| bool bt4 = true; |
| bool bt5 = true; |
| bool bf0 = false; |
| bool bf1 = false; |
| bool bf2 = false; |
| bool bf3 = false; |
| bool bf4 = false; |
| bool bf5 = false; |
| |
| bool a = bt0 && |
| bf0 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 10 |
| bt1 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 8 |
| bf1 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 6 |
| bt2 && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 4 |
| bf2; // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 2 |
| |
| bool b = bt0 || |
| bf0 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 20 |
| bt1 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 18 |
| bf1 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 16 |
| bt2 || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 14 |
| bf2; // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 12 |
| |
| bool c = (bt0 && |
| bf0) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 27 |
| (bt1 && |
| bf1) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 29 |
| (bt2 && |
| bf2) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 31 |
| (bt3 && |
| bf3) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 33 |
| (bt4 && |
| bf4) || // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 35 |
| (bf5 && |
| bf5); // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 37 |
| |
| bool d = (bt0 || |
| bf0) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 44 |
| (bt1 || |
| bf1) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 46 |
| (bt2 || |
| bf2) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 48 |
| (bt3 || |
| bf3) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 50 |
| (bt4 || |
| bf4) && // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 52 |
| (bt5 || |
| bf5); // CHECK: store {{.*}} @[[FUNC]], i32 0, i32 54 |
| |
| return a && b && c && d; |
| } |