Files
TheRock/compiler/amd-llvm/llvm/test/tools/llvm-cov/mcdc-macro.test
T
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

231 lines
8.9 KiB
Plaintext

// Test visualization of MC/DC constructs for branches in macro expansions.
// RUN: llvm-profdata merge %S/Inputs/mcdc-macro.proftext -o %t.profdata
// RUN: llvm-cov show --show-expansions --show-branches=count --show-mcdc %S/Inputs/mcdc-macro.o -instr-profile %t.profdata --compilation-dir=%S/Inputs | FileCheck %s
// RUN: llvm-cov show --show-expansions --show-branches=count --show-mcdc --show-mcdc-non-executed-vectors %S/Inputs/mcdc-macro.o -instr-profile %t.profdata --compilation-dir=%S/Inputs | FileCheck %s -check-prefix=ALL
// CHECK: | | | Branch (2:11): [Folded - Ignored]
// CHECK: | | | Branch (3:11): [True: 1, False: 0]
// CHECK: | | | Branch (3:23): [True: 1, False: 0]
// CHECK: | Branch (9:7): [True: 1, False: 0]
// CHECK-NEXT: | Branch (9:22): [True: 0, False: 0]
// CHECK-NEXT: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (9:7) to (9:23)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 5
// CHECK-NEXT: | Condition C1 --> (9:7)
// CHECK-NEXT: | Condition C2 --> (2:11)
// CHECK-NEXT: | Condition C3 --> (3:11)
// CHECK-NEXT: | Condition C4 --> (3:23)
// CHECK-NEXT: | Condition C5 --> (9:22)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2, C3, C4, C5 Result
// CHECK-NEXT: | 1 { T, C, T, T, - = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: not covered
// CHECK-NEXT: | C2-Pair: constant folded
// CHECK-NEXT: | C3-Pair: not covered
// CHECK-NEXT: | C4-Pair: not covered
// CHECK-NEXT: | C5-Pair: not covered
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// CHECK: | | | Branch (2:11): [Folded - Ignored]
// CHECK: | Branch (11:7): [True: 1, False: 0]
// CHECK-NEXT: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (11:7) to (11:13)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 2
// CHECK-NEXT: | Condition C1 --> (11:7)
// CHECK-NEXT: | Condition C2 --> (2:11)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2 Result
// CHECK-NEXT: | 1 { T, C = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: not covered
// CHECK-NEXT: | C2-Pair: constant folded
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// CHECK: | | | Branch (1:11): [True: 1, False: 0]
// CHECK: | | | Branch (2:11): [Folded - Ignored]
// CHECK: | | | | | Branch (3:11): [True: 0, False: 0]
// CHECK: | | | | | Branch (3:23): [True: 0, False: 0]
// CHECK: | Branch (13:7): [True: 1, False: 0]
// CHECK-NEXT: | Branch (13:13): [True: 1, False: 0]
// CHECK-NEXT: ------------------
// CHECK-NEXT: |---> MC/DC Decision Region (13:7) to (13:32)
// CHECK-NEXT: |
// CHECK-NEXT: | Number of Conditions: 6
// CHECK-NEXT: | Condition C1 --> (13:7)
// CHECK-NEXT: | Condition C2 --> (13:13)
// CHECK-NEXT: | Condition C3 --> (1:11)
// CHECK-NEXT: | Condition C4 --> (2:11)
// CHECK-NEXT: | Condition C5 --> (3:11)
// CHECK-NEXT: | Condition C6 --> (3:23)
// CHECK-NEXT: |
// CHECK-NEXT: | MC/DC Test Vectors:
// CHECK-NEXT: |
// CHECK-NEXT: | Executed:
// CHECK-NEXT: |
// CHECK-NEXT: | C1, C2, C3, C4, C5, C6 Result
// CHECK-NEXT: | 1 { T, T, T, C, -, - = T }
// CHECK-NEXT: |
// CHECK-NEXT: | C1-Pair: not covered
// CHECK-NEXT: | C2-Pair: not covered
// CHECK-NEXT: | C3-Pair: not covered
// CHECK-NEXT: | C4-Pair: constant folded
// CHECK-NEXT: | C5-Pair: not covered
// CHECK-NEXT: | C6-Pair: not covered
// CHECK-NEXT: | MC/DC Coverage for Decision: 0.00%
// CHECK-NEXT: |
// CHECK-NEXT: ------------------
// Same as CHECK above, but with --show-mcdc-non-executed-vectors (Not executed section after each decision).
// ALL: | | | Branch (2:11): [Folded - Ignored]
// ALL: | | | Branch (3:11): [True: 1, False: 0]
// ALL: | | | Branch (3:23): [True: 1, False: 0]
// ALL: | Branch (9:7): [True: 1, False: 0]
// ALL-NEXT: | Branch (9:22): [True: 0, False: 0]
// ALL-NEXT: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (9:7) to (9:23)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 5
// ALL-NEXT: | Condition C1 --> (9:7)
// ALL-NEXT: | Condition C2 --> (2:11)
// ALL-NEXT: | Condition C3 --> (3:11)
// ALL-NEXT: | Condition C4 --> (3:23)
// ALL-NEXT: | Condition C5 --> (9:22)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4, C5 Result
// ALL-NEXT: | 1 { T, C, T, T, - = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4, C5 Result
// ALL-NEXT: | 2 { F, C, -, -, F = F }
// ALL-NEXT: | 3 { T, C, -, -, F = F }
// ALL-NEXT: | 4 { T, C, F, -, F = F }
// ALL-NEXT: | 5 { T, C, T, F, F = F }
// ALL-NEXT: | 6 { F, C, -, -, T = T }
// ALL-NEXT: | 7 { T, C, -, -, T = T }
// ALL-NEXT: | 8 { T, C, F, -, T = T }
// ALL-NEXT: | 9 { T, C, T, F, T = T }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: not covered
// ALL-NEXT: | C2-Pair: constant folded
// ALL-NEXT: | C3-Pair: not covered
// ALL-NEXT: | C4-Pair: not covered
// ALL-NEXT: | C5-Pair: not covered
// ALL-NEXT: | MC/DC Coverage for Decision: 0.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
// ALL: | | | Branch (2:11): [Folded - Ignored]
// ALL: | Branch (11:7): [True: 1, False: 0]
// ALL-NEXT: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (11:7) to (11:13)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 2
// ALL-NEXT: | Condition C1 --> (11:7)
// ALL-NEXT: | Condition C2 --> (2:11)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2 Result
// ALL-NEXT: | 1 { T, C = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2 Result
// ALL-NEXT: | 2 { F, C = F }
// ALL-NEXT: | 3 { T, C = F }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: not covered
// ALL-NEXT: | C2-Pair: constant folded
// ALL-NEXT: | MC/DC Coverage for Decision: 0.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
// ALL: | | | Branch (1:11): [True: 1, False: 0]
// ALL: | | | Branch (2:11): [Folded - Ignored]
// ALL: | | | | | Branch (3:11): [True: 0, False: 0]
// ALL: | | | | | Branch (3:23): [True: 0, False: 0]
// ALL: | Branch (13:7): [True: 1, False: 0]
// ALL-NEXT: | Branch (13:13): [True: 1, False: 0]
// ALL-NEXT: ------------------
// ALL-NEXT: |---> MC/DC Decision Region (13:7) to (13:32)
// ALL-NEXT: |
// ALL-NEXT: | Number of Conditions: 6
// ALL-NEXT: | Condition C1 --> (13:7)
// ALL-NEXT: | Condition C2 --> (13:13)
// ALL-NEXT: | Condition C3 --> (1:11)
// ALL-NEXT: | Condition C4 --> (2:11)
// ALL-NEXT: | Condition C5 --> (3:11)
// ALL-NEXT: | Condition C6 --> (3:23)
// ALL-NEXT: |
// ALL-NEXT: | MC/DC Test Vectors:
// ALL-NEXT: |
// ALL-NEXT: | Executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4, C5, C6 Result
// ALL-NEXT: | 1 { T, T, T, C, -, - = T }
// ALL-NEXT: |
// ALL-NEXT: | Not executed:
// ALL-NEXT: |
// ALL-NEXT: | C1, C2, C3, C4, C5, C6 Result
// ALL-NEXT: | 2 { F, -, -, C, -, - = F }
// ALL-NEXT: | 3 { T, F, -, C, -, - = F }
// ALL-NEXT: | 4 { T, T, F, C, -, - = F }
// ALL-NEXT: | 5 { F, -, -, C, F, - = F }
// ALL-NEXT: | 6 { T, F, -, C, F, - = F }
// ALL-NEXT: | 7 { T, T, F, C, F, - = F }
// ALL-NEXT: | 8 { F, -, -, C, T, F = F }
// ALL-NEXT: | 9 { T, F, -, C, T, F = F }
// ALL-NEXT: | 10 { T, T, F, C, T, F = F }
// ALL-NEXT: | 11 { F, -, -, C, T, T = T }
// ALL-NEXT: | 12 { T, F, -, C, T, T = T }
// ALL-NEXT: | 13 { T, T, F, C, T, T = T }
// ALL-NEXT: |
// ALL-NEXT: | C1-Pair: not covered
// ALL-NEXT: | C2-Pair: not covered
// ALL-NEXT: | C3-Pair: not covered
// ALL-NEXT: | C4-Pair: constant folded
// ALL-NEXT: | C5-Pair: not covered
// ALL-NEXT: | C6-Pair: not covered
// ALL-NEXT: | MC/DC Coverage for Decision: 0.00%
// ALL-NEXT: |
// ALL-NEXT: ------------------
Instructions for regenerating the test:
cd %S/Inputs # Or copy mcdc-macro.c into the working directory
clang -fcoverage-mcdc -fprofile-instr-generate -fcoverage-compilation-dir=. \
-Os -mllvm -enable-name-compression=false \
-fcoverage-mapping mcdc-macro.c -c
# Instructions for generating proftext
clang -fprofile-instr-generate mcdc-macro.o
rm -f default.prof*
./a.out
llvm-profdata merge --sparse -o default.profdata default.profraw
llvm-profdata merge --text -o mcdc-macro.proftext default.profdata