| // Test to ensure RHS condition of logical operators isn't evaluated more than |
| // one time when instrumenting RHS counter blocks for branch coverage. |
| |
| // RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -main-file-name branch-profdup.cpp %s -o - -emit-llvm -fprofile-instrument=clang | FileCheck -allow-deprecated-dag-overlap %s |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test1b |
| // CHECK-COUNT-1: = call {{.*}}@_Z5fval1v() |
| // CHECK-NOT: = call {{.*}}@_Z5fval1v() |
| extern bool fval1(); |
| bool test1(bool a) { |
| return (a && fval1()); |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test2b |
| // CHECK-COUNT-1: call {{.*}}_Z5fval2v() |
| // CHECK-NOT: call {{.*}}_Z5fval2v() |
| extern bool fval2(); |
| bool test2(bool a) { |
| return (a || fval2()); |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test3v |
| // CHECK-COUNT-1: call {{.*}}_Z5fval3v() |
| // CHECK-NOT: call {{.*}}_Z5fval3v() |
| extern bool fval3(); |
| bool test3() { |
| return (1 && fval3()); |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test4v |
| // CHECK-COUNT-1: call {{.*}}_Z5fval4v() |
| // CHECK-NOT: call {{.*}}_Z5fval4v() |
| extern bool fval4(); |
| bool test4() { |
| return (0 || fval4()); |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test5b |
| // CHECK-COUNT-1: call {{.*}}_Z5fval5v() |
| // CHECK-NOT: call {{.*}}_Z5fval5v() |
| extern bool fval5(); |
| bool test5(bool a) { |
| if (a && fval5()) |
| return true; |
| return false; |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test6b |
| // CHECK-COUNT-1: call {{.*}}_Z5fval6v() |
| // CHECK-NOT: call {{.*}}_Z5fval6v() |
| extern bool fval6(); |
| bool test6(bool a) { |
| if (a || fval6()) |
| return true; |
| return false; |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test7v |
| // CHECK-COUNT-1: call {{.*}}_Z5fval7v() |
| // CHECK-NOT: call {{.*}}_Z5fval7v() |
| extern bool fval7(); |
| bool test7() { |
| if (1 && fval7()) |
| return true; |
| return false; |
| } |
| |
| // CHECK-LABEL: define {{.*}}@_Z5test8v |
| // CHECK-COUNT-1: call {{.*}}_Z5fval8v() |
| // CHECK-NOT: call {{.*}}_Z5fval8v() |
| extern bool fval8(); |
| bool test8() { |
| if (0 || fval8()) |
| return true; |
| return false; |
| } |