brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.3 KiB · 5424625 Raw
229 lines · plain
1// Test visualization of MC/DC constructs for constant-folded condition masking.2 3// RUN: llvm-profdata merge %S/Inputs/mcdc-const.proftext -o %t.profdata4// RUN: llvm-cov show --show-branches=count --show-mcdc %S/Inputs/mcdc-const.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs | FileCheck %s -check-prefix=CHECKGENERALCASE5 6//      CHECKGENERALCASE:  ------------------7// CHECKGENERALCASE-NEXT:  |  Branch (12:8): [True: 4, False: 1]8// CHECKGENERALCASE-NEXT:  |  Branch (12:13): [Folded - Ignored]9// CHECKGENERALCASE-NEXT:  |  Branch (12:20): [Folded - Ignored]10// CHECKGENERALCASE-NEXT:  |  Branch (12:25): [True: 0, False: 0]11// CHECKGENERALCASE-NEXT:  |  Branch (12:31): [Folded - Ignored]12// CHECKGENERALCASE-NEXT:  ------------------13// CHECKGENERALCASE-NEXT:  |---> MC/DC Decision Region (12:7) to (12:32)14// CHECKGENERALCASE-NEXT:  |15// CHECKGENERALCASE-NEXT:  |  Number of Conditions: 516// CHECKGENERALCASE-NEXT:  |     Condition C1 --> (12:8)17// CHECKGENERALCASE-NEXT:  |     Condition C2 --> (12:13)18// CHECKGENERALCASE-NEXT:  |     Condition C3 --> (12:20)19// CHECKGENERALCASE-NEXT:  |     Condition C4 --> (12:25)20// CHECKGENERALCASE-NEXT:  |     Condition C5 --> (12:31)21// CHECKGENERALCASE-NEXT:  |22// CHECKGENERALCASE-NEXT:  |  Executed MC/DC Test Vectors:23// CHECKGENERALCASE-NEXT:  |24// CHECKGENERALCASE-NEXT:  |     C1, C2, C3, C4, C5    Result25// CHECKGENERALCASE-NEXT:  |  1 { F,  C,  C,  -,  C  = F      }26// CHECKGENERALCASE-NEXT:  |  2 { T,  C,  C,  -,  C  = T      }27// CHECKGENERALCASE-NEXT:  |28// CHECKGENERALCASE-NEXT:  |  C1-Pair: covered: (1,2)29// CHECKGENERALCASE-NEXT:  |  C2-Pair: constant folded30// CHECKGENERALCASE-NEXT:  |  C3-Pair: constant folded31// CHECKGENERALCASE-NEXT:  |  C4-Pair: not covered32// CHECKGENERALCASE-NEXT:  |  C5-Pair: constant folded33// CHECKGENERALCASE-NEXT:  |  MC/DC Coverage for Decision: 50.00%34// CHECKGENERALCASE-NEXT:  |35// CHECKGENERALCASE-NEXT:  ------------------36 37// RUN: llvm-profdata merge %S/Inputs/mcdc-const-folding.proftext -o %t.profdata38// RUN: llvm-cov show --show-mcdc %S/Inputs/mcdc-const-folding.o -instr-profile %t.profdata -path-equivalence=.,%S/Inputs | FileCheck %s -check-prefix=CHECKFULLCASE39// RUN: llvm-cov report --show-mcdc-summary %S/Inputs/mcdc-const-folding.o -instr-profile %t.profdata -show-functions -path-equivalence=.,%S/Inputs %S/Inputs/mcdc-const-folding.cpp | FileCheck %s -check-prefix=REPORT40 41//      CHECKFULLCASE: |  1 { C,  -  = F      }42//      CHECKFULLCASE: |  C1-Pair: constant folded43// CHECKFULLCASE-NEXT: |  C2-Pair: not covered44//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%45//      CHECKFULLCASE: |  1 { F,  C  = F      }46// CHECKFULLCASE-NEXT: |  2 { T,  C  = F      }47//      CHECKFULLCASE: |  C1-Pair: not covered48// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded49//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%50//      CHECKFULLCASE: |  1 { C,  F  = F      }51// CHECKFULLCASE-NEXT: |  2 { C,  T  = T      }52//      CHECKFULLCASE: |  C1-Pair: constant folded53// CHECKFULLCASE-NEXT: |  C2-Pair: covered: (1,2)54//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%55//      CHECKFULLCASE: |  1 { F,  C  = F      }56// CHECKFULLCASE-NEXT: |  2 { T,  C  = T      }57//      CHECKFULLCASE: |  C1-Pair: covered: (1,2)58// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded59//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%60//      CHECKFULLCASE: |  1 { C,  -  = T      }61//      CHECKFULLCASE: |  C1-Pair: constant folded62// CHECKFULLCASE-NEXT: |  C2-Pair: not covered63//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%64//      CHECKFULLCASE: |  1 { F,  C  = T      }65// CHECKFULLCASE-NEXT: |  2 { T,  C  = T      }66//      CHECKFULLCASE: |  C1-Pair: not covered67// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded68//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%69//      CHECKFULLCASE: |  1 { C,  F  = F      }70// CHECKFULLCASE-NEXT: |  2 { C,  T  = T      }71//      CHECKFULLCASE: |  C1-Pair: constant folded72// CHECKFULLCASE-NEXT: |  C2-Pair: covered: (1,2)73//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%74//      CHECKFULLCASE: |  1 { F,  C  = F      }75// CHECKFULLCASE-NEXT: |  2 { T,  C  = T      }76//      CHECKFULLCASE: |  C1-Pair: covered: (1,2)77// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded78//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%79//      CHECKFULLCASE: |  1 { C,  -,  -  = F      }80//      CHECKFULLCASE: |  C1-Pair: constant folded81// CHECKFULLCASE-NEXT: |  C2-Pair: not covered82// CHECKFULLCASE-NEXT: |  C3-Pair: not covered83//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%84//      CHECKFULLCASE: |  1 { F,  C,  -  = F      }85// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = F      }86//      CHECKFULLCASE: |  C1-Pair: not covered87// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded88// CHECKFULLCASE-NEXT: |  C3-Pair: not covered89//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%90//      CHECKFULLCASE: |  1 { C,  F,  -  = F      }91// CHECKFULLCASE-NEXT: |  2 { C,  T,  F  = F      }92// CHECKFULLCASE-NEXT: |  3 { C,  T,  T  = T      }93//      CHECKFULLCASE: |  C1-Pair: constant folded94// CHECKFULLCASE-NEXT: |  C2-Pair: covered: (1,3)95// CHECKFULLCASE-NEXT: |  C3-Pair: covered: (2,3)96//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%97//      CHECKFULLCASE: |  1 { F,  C,  -  = F      }98// CHECKFULLCASE-NEXT: |  2 { T,  C,  F  = F      }99// CHECKFULLCASE-NEXT: |  3 { T,  C,  T  = T      }100//      CHECKFULLCASE: |  C1-Pair: covered: (1,3)101// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded102// CHECKFULLCASE-NEXT: |  C3-Pair: covered: (2,3)103//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%104//      CHECKFULLCASE: |  1 { C,  -,  -  = T      }105//      CHECKFULLCASE: |  C1-Pair: constant folded106// CHECKFULLCASE-NEXT: |  C2-Pair: not covered107// CHECKFULLCASE-NEXT: |  C3-Pair: not covered108//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%109//      CHECKFULLCASE: |  1 { F,  C,  -  = T      }110// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = T      }111//      CHECKFULLCASE: |  C1-Pair: not covered112// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded113// CHECKFULLCASE-NEXT: |  C3-Pair: not covered114//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%115//      CHECKFULLCASE: |  1 { C,  F,  T  = T      }116// CHECKFULLCASE-NEXT: |  2 { C,  T,  -  = T      }117//      CHECKFULLCASE: |  C1-Pair: constant folded118// CHECKFULLCASE-NEXT: |  C2-Pair: not covered119// CHECKFULLCASE-NEXT: |  C3-Pair: not covered120//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%121//      CHECKFULLCASE: |  1 { F,  C,  T  = T      }122// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = T      }123//      CHECKFULLCASE: |  C1-Pair: not covered124// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded125// CHECKFULLCASE-NEXT: |  C3-Pair: not covered126//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%127//      CHECKFULLCASE: |  1 { F,  -,  C  = F      }128// CHECKFULLCASE-NEXT: |  2 { T,  F,  C  = F      }129// CHECKFULLCASE-NEXT: |  3 { T,  T,  C  = F      }130//      CHECKFULLCASE: |  C1-Pair: not covered131// CHECKFULLCASE-NEXT: |  C2-Pair: not covered132// CHECKFULLCASE-NEXT: |  C3-Pair: constant folded133//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%134//      CHECKFULLCASE: |  1 { F,  C,  -  = F      }135// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = F      }136//      CHECKFULLCASE: |  C1-Pair: not covered137// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded138// CHECKFULLCASE-NEXT: |  C3-Pair: not covered139//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%140//      CHECKFULLCASE: |  1 { F,  -,  C  = F      }141// CHECKFULLCASE-NEXT: |  2 { T,  F,  C  = F      }142// CHECKFULLCASE-NEXT: |  3 { T,  T,  C  = T      }143//      CHECKFULLCASE: |  C1-Pair: covered: (1,3)144// CHECKFULLCASE-NEXT: |  C2-Pair: covered: (2,3)145// CHECKFULLCASE-NEXT: |  C3-Pair: constant folded146//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%147//      CHECKFULLCASE: |  1 { F,  C,  -  = F      }148// CHECKFULLCASE-NEXT: |  2 { T,  C,  F  = F      }149// CHECKFULLCASE-NEXT: |  3 { T,  C,  T  = T      }150//      CHECKFULLCASE: |  C1-Pair: covered: (1,3)151// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded152// CHECKFULLCASE-NEXT: |  C3-Pair: covered: (2,3)153//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 100.00%154//      CHECKFULLCASE: |  1 { F,  T,  C  = T      }155// CHECKFULLCASE-NEXT: |  2 { T,  -,  C  = T      }156//      CHECKFULLCASE: |  C1-Pair: not covered157// CHECKFULLCASE-NEXT: |  C2-Pair: not covered158// CHECKFULLCASE-NEXT: |  C3-Pair: constant folded159//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%160//      CHECKFULLCASE: |  1 { F,  C,  -  = T      }161// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = T      }162//      CHECKFULLCASE: |  C1-Pair: not covered163// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded164// CHECKFULLCASE-NEXT: |  C3-Pair: not covered165//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%166//      CHECKFULLCASE: |  1 { F,  T,  C  = T      }167// CHECKFULLCASE-NEXT: |  2 { T,  -,  C  = T      }168//      CHECKFULLCASE: |  C1-Pair: not covered169// CHECKFULLCASE-NEXT: |  C2-Pair: not covered170// CHECKFULLCASE-NEXT: |  C3-Pair: constant folded171//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%172//      CHECKFULLCASE: |  1 { F,  C,  T  = T      }173// CHECKFULLCASE-NEXT: |  2 { T,  C,  -  = T      }174//      CHECKFULLCASE: |  C1-Pair: not covered175// CHECKFULLCASE-NEXT: |  C2-Pair: constant folded176// CHECKFULLCASE-NEXT: |  C3-Pair: not covered177//      CHECKFULLCASE: |  MC/DC Coverage for Decision: 0.00%178 179//      REPORT: _Z5case0b {{.*}} 1       1   0.00%180// REPORT-NEXT: _Z5case1b {{.*}} 1       1   0.00%181// REPORT-NEXT: _Z5case2b {{.*}} 1       0 100.00%182// REPORT-NEXT: _Z5case3b {{.*}} 1       0 100.00%183// REPORT-NEXT: _Z5case4b {{.*}} 1       1   0.00%184// REPORT-NEXT: _Z5case5b {{.*}} 1       1   0.00%185// REPORT-NEXT: _Z5case6b {{.*}} 1       0 100.00%186// REPORT-NEXT: _Z5case7b {{.*}} 1       0 100.00%187// REPORT-NEXT: _Z5case8bb {{.*}} 2       2   0.00%188// REPORT-NEXT: _Z5case9bb {{.*}} 2       2   0.00%189// REPORT-NEXT: _Z5caseabb {{.*}} 2       0 100.00%190// REPORT-NEXT: _Z5casebbb {{.*}} 2       0 100.00%191// REPORT-NEXT: _Z5casecbb {{.*}} 2       2   0.00%192// REPORT-NEXT: _Z5casedbb {{.*}} 2       2   0.00%193// REPORT-NEXT: _Z5caseebb {{.*}} 2       2   0.00%194// REPORT-NEXT: _Z5casefbb {{.*}} 2       2   0.00%195// REPORT-NEXT: _Z5casegbb {{.*}} 2       2   0.00%196// REPORT-NEXT: _Z5casehbb {{.*}} 2       2   0.00%197// REPORT-NEXT: _Z5caseibb {{.*}} 2       0 100.00%198// REPORT-NEXT: _Z5casejbb {{.*}} 2       0 100.00%199// REPORT-NEXT: _Z5casekbb {{.*}} 2       2   0.00%200// REPORT-NEXT: _Z5caselbb {{.*}} 2       2   0.00%201// REPORT-NEXT: _Z5casembb {{.*}} 2       2   0.00%202// REPORT-NEXT: _Z5casenbb {{.*}} 2       2   0.00%203//      REPORT: TOTAL {{.*}} 40      28  30.00%204 205Instructions for regenerating the test:206 207cd %S/Inputs # Or copy files into the working directory208 209clang++ -c -Os \210    -fcoverage-compilation-dir=. -mllvm -enable-name-compression=false \211    -fcoverage-mcdc -fprofile-instr-generate -fcoverage-mapping \212    mcdc-const.cpp mcdc-const-folding.cpp213 214# Instructions for regenerating proftext215 216for x in mcdc-const mcdc-const-folding; do (217  clang++ -fprofile-instr-generate $x.o -o $x218  find -name '*.profraw' | xargs rm -f219  export LLVM_PROFILE_FILE=$x-%p.profraw220  ./$x 0 1221  if [ "$x" = "mcdc-const-folding" ]; then222    ./$x 1 0223    ./$x 1 1224    ./$x 1 1 # Redundant225  fi226  llvm-profdata merge --sparse -o $x.profdata $(find -name '*.profraw')227  llvm-profdata merge --text -o $x.proftext $x.profdata228); done229