Justin Bogner | bf42cfd | 2015-02-18 21:24:51 +0000 | [diff] [blame^] | 1 | // RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name macro-expansion.c %s | FileCheck %s |
| 2 | |
| 3 | // CHECK: func |
| 4 | // CHECK: File 1, [[@LINE+4]]:12 -> [[@LINE+4]]:38 = #0 |
| 5 | // CHECK-NEXT: File 1, [[@LINE+3]]:15 -> [[@LINE+3]]:28 = (#0 + #2) |
| 6 | // CHECK-NEXT: File 1, [[@LINE+2]]:24 -> [[@LINE+2]]:26 = #3 |
| 7 | // CHECK-NEXT: File 1, [[@LINE+1]]:36 -> [[@LINE+1]]:37 = (#0 + #2) |
| 8 | #define M1 do { if (0) {} } while (0) |
| 9 | // CHECK-NEXT: File 2, [[@LINE+8]]:15 -> [[@LINE+8]]:41 = #0 |
| 10 | // CHECK-NEXT: File 2, [[@LINE+7]]:18 -> [[@LINE+7]]:31 = (#0 + #4) |
| 11 | // CHECK-NEXT: File 2, [[@LINE+6]]:27 -> [[@LINE+6]]:29 = #5 |
| 12 | // CHECK-NEXT: File 2, [[@LINE+5]]:39 -> [[@LINE+5]]:40 = (#0 + #4) |
| 13 | // CHECK-NEXT: File 3, [[@LINE+4]]:15 -> [[@LINE+4]]:41 = #0 |
| 14 | // CHECK-NEXT: File 3, [[@LINE+3]]:18 -> [[@LINE+3]]:31 = (#0 + #6) |
| 15 | // CHECK-NEXT: File 3, [[@LINE+2]]:27 -> [[@LINE+2]]:29 = #7 |
| 16 | // CHECK-NEXT: File 3, [[@LINE+1]]:39 -> [[@LINE+1]]:40 = (#0 + #6) |
| 17 | #define M2(x) do { if (x) {} } while (0) |
| 18 | // CHECK-NEXT: File 4, [[@LINE+4]]:15 -> [[@LINE+4]]:38 = #0 |
| 19 | // CHECK-NEXT: File 4, [[@LINE+3]]:18 -> [[@LINE+3]]:28 = (#0 + #8) |
| 20 | // CHECK-NEXT: Expansion,File 4, [[@LINE+2]]:20 -> [[@LINE+2]]:22 = (#0 + #8) |
| 21 | // CHECK-NEXT: File 4, [[@LINE+1]]:36 -> [[@LINE+1]]:37 = (#0 + #8) |
| 22 | #define M3(x) do { M2(x); } while (0) |
| 23 | // CHECK-NEXT: File 5, [[@LINE+2]]:15 -> [[@LINE+2]]:27 = #0 |
| 24 | // CHECK-NEXT: File 5, [[@LINE+1]]:23 -> [[@LINE+1]]:26 = #12 |
| 25 | #define M4(x) ((x) && (x)) |
| 26 | // CHECK-NEXT: File 6, [[@LINE+2]]:15 -> [[@LINE+2]]:27 = #0 |
| 27 | // CHECK-NEXT: File 6, [[@LINE+1]]:23 -> [[@LINE+1]]:26 = #14 |
| 28 | #define M5(x) ((x) || (x)) |
| 29 | // CHECK-NEXT: File 7, [[@LINE+1]]:15 -> [[@LINE+1]]:26 = #0 |
| 30 | #define M6(x) ((x) + (x)) |
| 31 | // CHECK-NEXT: File 8, [[@LINE+1]]:15 -> [[@LINE+1]]:18 = #0 |
| 32 | #define M7(x) (x) |
| 33 | |
| 34 | // Check for the expansion of M2 within M3. |
| 35 | // CHECK-NEXT: File 9, {{[0-9]+}}:15 -> {{[0-9]+}}:41 = (#0 + #8) |
| 36 | // CHECK-NEXT: File 9, {{[0-9]+}}:18 -> {{[0-9]+}}:31 = ((#0 + #8) + #9) |
| 37 | // CHECK-NEXT: File 9, {{[0-9]+}}:27 -> {{[0-9]+}}:29 = #10 |
| 38 | // CHECK-NEXT: File 9, {{[0-9]+}}:39 -> {{[0-9]+}}:40 = ((#0 + #8) + #9) |
| 39 | |
| 40 | void func(int x) { |
| 41 | if (x) {} |
| 42 | M1; |
| 43 | M2(!x); |
| 44 | M2(x); |
| 45 | M3(x); |
| 46 | if (M4(x)) {} |
| 47 | if (M5(x)) {} |
| 48 | if (M6(x)) {} |
| 49 | if (M7(x)) {} |
| 50 | } |
| 51 | |
| 52 | int main(int argc, const char *argv[]) { |
| 53 | func(0); |
| 54 | } |