| /// `case` labels generated by a user macro invoked from a -isystem header | |
| /// must not crash the coverage mapping builder. | |
| // RUN: rm -rf %t && split-file %s %t && cd %t | |
| // RUN: %clang_cc1 -triple %itanium_abi_triple -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -isystem sys a.cpp | FileCheck %s | |
| // CHECK-LABEL: main: | |
| // CHECK-NEXT: File 0, 9:29 -> 9:43 = #0 | |
| // CHECK-LABEL: _ZL3fooi: | |
| // CHECK-NEXT: File 0, 1:24 -> 7:2 = #0 | |
| // CHECK-NEXT: Branch,File 0, 2:11 -> 2:12 = ((#2 + #3) + #4), (((#0 - #2) - #3) - #4) | |
| // CHECK-NEXT: Gap,File 0, 2:14 -> 5:10 = 0 | |
| // CHECK-NEXT: File 0, 4:21 -> 5:10 = ((#2 + #3) + #4) | |
| // CHECK-NEXT: File 0, 4:21 -> 5:10 = (#2 + #3) | |
| // CHECK-NEXT: File 0, 4:21 -> 5:10 = #2 | |
| // CHECK-NEXT: File 1, 3:20 -> 3:27 = #2 | |
| // CHECK-NEXT: Branch,File 1, 3:20 -> 3:26 = #2, (#0 - #2) | |
| // CHECK-NEXT: File 2, 3:20 -> 3:27 = (#2 + #3) | |
| // CHECK-NEXT: Branch,File 2, 3:20 -> 3:26 = #3, (#0 - #3) | |
| // CHECK-NEXT: File 3, 3:20 -> 3:27 = ((#2 + #3) + #4) | |
| // CHECK-NEXT: Branch,File 3, 3:20 -> 3:26 = #4, (#0 - #4) | |
| /// types.def must not leak into the file mapping. | |
| // CHECK-NOT: Expansion, | |
| // CHECK-NOT: File | |
| //--- a.cpp | |
| static void foo(int x) { | |
| switch (x) { | |
| #define GENERIC(n) case n: | |
| #include "types.def" | |
| break; | |
| } | |
| } | |
| int main(int argc, char **) { foo(argc); } | |
| //--- sys/types.def | |
| #define MID(name) GENERIC(name) | |
| MID(0) | |
| MID(1) | |
| MID(2) |