218 lines
11 KiB
Text
218 lines
11 KiB
Text
// Test visualization of MC/DC constructs for constant-folded condition masking.
|
|
|
|
// RUN: llvm-profdata merge %S/Inputs/mcdc-const.proftext -o %t.profdata
|
|
// RUN: llvm-cov show --show-branches=count --show-mcdc %S/Inputs/mcdc-const.o -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs %S/Inputs/mcdc-const.cpp | FileCheck %s -check-prefix=CHECKGENERALCASE
|
|
|
|
// CHECKGENERALCASE: ------------------
|
|
// CHECKGENERALCASE-NEXT: | Branch (12:8): [True: 4, False: 1]
|
|
// CHECKGENERALCASE-NEXT: | Branch (12:13): [Folded - Ignored]
|
|
// CHECKGENERALCASE-NEXT: | Branch (12:20): [Folded - Ignored]
|
|
// CHECKGENERALCASE-NEXT: | Branch (12:25): [True: 0, False: 0]
|
|
// CHECKGENERALCASE-NEXT: | Branch (12:31): [Folded - Ignored]
|
|
// CHECKGENERALCASE-NEXT: ------------------
|
|
// CHECKGENERALCASE-NEXT: |---> MC/DC Decision Region (12:7) to (12:32)
|
|
// CHECKGENERALCASE-NEXT: |
|
|
// CHECKGENERALCASE-NEXT: | Number of Conditions: 5
|
|
// CHECKGENERALCASE-NEXT: | Condition C1 --> (12:8)
|
|
// CHECKGENERALCASE-NEXT: | Condition C2 --> (12:13)
|
|
// CHECKGENERALCASE-NEXT: | Condition C3 --> (12:20)
|
|
// CHECKGENERALCASE-NEXT: | Condition C4 --> (12:25)
|
|
// CHECKGENERALCASE-NEXT: | Condition C5 --> (12:31)
|
|
// CHECKGENERALCASE-NEXT: |
|
|
// CHECKGENERALCASE-NEXT: | Executed MC/DC Test Vectors:
|
|
// CHECKGENERALCASE-NEXT: |
|
|
// CHECKGENERALCASE-NEXT: | C1, C2, C3, C4, C5 Result
|
|
// CHECKGENERALCASE-NEXT: | 1 { F, C, C, -, C = F }
|
|
// CHECKGENERALCASE-NEXT: | 2 { T, C, C, -, C = T }
|
|
// CHECKGENERALCASE-NEXT: |
|
|
// CHECKGENERALCASE-NEXT: | C1-Pair: covered: (1,2)
|
|
// CHECKGENERALCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKGENERALCASE-NEXT: | C3-Pair: constant folded
|
|
// CHECKGENERALCASE-NEXT: | C4-Pair: not covered
|
|
// CHECKGENERALCASE-NEXT: | C5-Pair: constant folded
|
|
// CHECKGENERALCASE-NEXT: | MC/DC Coverage for Decision: 50.00%
|
|
// CHECKGENERALCASE-NEXT: |
|
|
// CHECKGENERALCASE-NEXT: ------------------
|
|
|
|
// RUN: llvm-profdata merge %S/Inputs/mcdc-const-folding.proftext -o %t.profdata
|
|
// RUN: llvm-cov show --show-mcdc %S/Inputs/mcdc-const-folding.o -instr-profile %t.profdata -path-equivalence=/tmp,%S/Inputs %S/Inputs/mcdc-const-folding.cpp | FileCheck %s -check-prefix=CHECKFULLCASE
|
|
// RUN: llvm-cov report --show-mcdc-summary %S/Inputs/mcdc-const-folding.o -instr-profile %t.profdata -show-functions -path-equivalence=/tmp,%S/Inputs %S/Inputs/mcdc-const-folding.cpp | FileCheck %s -check-prefix=REPORT
|
|
|
|
// CHECKFULLCASE: | 1 { C, - = F }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { F, C = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C = F }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { C, F = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: covered: (1,2)
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { F, C = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: covered: (1,2)
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { C, - = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, C = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { C, F = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: covered: (1,2)
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { F, C = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: covered: (1,2)
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { C, -, - = F }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { F, C, - = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C, - = F }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { C, F, - = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { C, T, F = F }
|
|
// CHECKFULLCASE-NEXT: | 3 { C, T, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: covered: (1,3)
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: covered: (2,3)
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { F, C, - = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C, F = F }
|
|
// CHECKFULLCASE-NEXT: | 3 { T, C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: covered: (1,3)
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: covered: (2,3)
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { C, -, - = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, C, - = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, C, - = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { C, F, T = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { C, T, - = T }
|
|
// CHECKFULLCASE: | C1-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, C, - = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { F, -, C = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, F, C = F }
|
|
// CHECKFULLCASE-NEXT: | 3 { T, T, C = F }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { F, C, - = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C, - = F }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { F, -, C = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, F, C = F }
|
|
// CHECKFULLCASE-NEXT: | 3 { T, T, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: covered: (1,3)
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: covered: (2,3)
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { F, C, - = F }
|
|
// CHECKFULLCASE-NEXT: | 2 { T, C, F = F }
|
|
// CHECKFULLCASE-NEXT: | 3 { T, C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: covered: (1,3)
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: covered: (2,3)
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 100.00%
|
|
// CHECKFULLCASE: | 1 { T, -, C = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, T, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, C, - = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, C, - = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, -, C = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, T, C = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: constant folded
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
// CHECKFULLCASE: | 1 { T, C, - = T }
|
|
// CHECKFULLCASE-NEXT: | 2 { F, C, T = T }
|
|
// CHECKFULLCASE: | C1-Pair: not covered
|
|
// CHECKFULLCASE-NEXT: | C2-Pair: constant folded
|
|
// CHECKFULLCASE-NEXT: | C3-Pair: not covered
|
|
// CHECKFULLCASE: | MC/DC Coverage for Decision: 0.00%
|
|
|
|
// REPORT: _Z5case0b {{.*}} 1 1 0.00%
|
|
// REPORT-NEXT: _Z5case1b {{.*}} 1 1 0.00%
|
|
// REPORT-NEXT: _Z5case2b {{.*}} 1 0 100.00%
|
|
// REPORT-NEXT: _Z5case3b {{.*}} 1 0 100.00%
|
|
// REPORT-NEXT: _Z5case4b {{.*}} 1 1 0.00%
|
|
// REPORT-NEXT: _Z5case5b {{.*}} 1 1 0.00%
|
|
// REPORT-NEXT: _Z5case6b {{.*}} 1 0 100.00%
|
|
// REPORT-NEXT: _Z5case7b {{.*}} 1 0 100.00%
|
|
// REPORT-NEXT: _Z5case8bb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5case9bb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5caseabb {{.*}} 2 0 100.00%
|
|
// REPORT-NEXT: _Z5casebbb {{.*}} 2 0 100.00%
|
|
// REPORT-NEXT: _Z5casecbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casedbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5caseebb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casefbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casegbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casehbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5caseibb {{.*}} 2 0 100.00%
|
|
// REPORT-NEXT: _Z5casejbb {{.*}} 2 0 100.00%
|
|
// REPORT-NEXT: _Z5casekbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5caselbb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casembb {{.*}} 2 2 0.00%
|
|
// REPORT-NEXT: _Z5casenbb {{.*}} 2 2 0.00%
|
|
// REPORT: TOTAL {{.*}} 40 28 30.00%
|
|
|
|
Instructions for regenerating the test:
|
|
|
|
# cd %S/Inputs
|
|
cp mcdc-const.cpp /tmp
|
|
cp mcdc-const-folding.cpp /tmp
|
|
|
|
clang -fcoverage-mcdc -fprofile-instr-generate -fcoverage-compilation-dir=. \
|
|
-fcoverage-mapping /tmp/mcdc-const.cpp -o /tmp/mcdc-const.o
|
|
|
|
clang -fcoverage-mcdc -fprofile-instr-generate -fcoverage-compilation-dir=. \
|
|
-fcoverage-mapping /tmp/mcdc-const-folding.cpp -o /tmp/mcdc-const-folding.o
|
|
|
|
mv /tmp/mcdc-const.o %S/Inputs
|
|
mv /tmp/mcdc-const-folding.o %S/Inputs
|