10e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name macro-expansion.c %s | FileCheck %s 20e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 30e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: func 40e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK: File 1, [[@LINE+5]]:12 -> [[@LINE+5]]:38 = #0 50e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 1, [[@LINE+4]]:15 -> [[@LINE+4]]:28 = (#0 + #2) 60e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 1, [[@LINE+3]]:21 -> [[@LINE+3]]:22 = (#0 + #2) 70e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 1, [[@LINE+2]]:24 -> [[@LINE+2]]:26 = #3 80e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 1, [[@LINE+1]]:36 -> [[@LINE+1]]:37 = (#0 + #2) 90e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M1 do { if (0) {} } while (0) 100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 2, [[@LINE+10]]:15 -> [[@LINE+10]]:41 = #0 110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 2, [[@LINE+9]]:18 -> [[@LINE+9]]:31 = (#0 + #4) 120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 2, [[@LINE+8]]:24 -> [[@LINE+8]]:25 = (#0 + #4) 130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 2, [[@LINE+7]]:27 -> [[@LINE+7]]:29 = #5 140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 2, [[@LINE+6]]:39 -> [[@LINE+6]]:40 = (#0 + #4) 150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 3, [[@LINE+5]]:15 -> [[@LINE+5]]:41 = #0 160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 3, [[@LINE+4]]:18 -> [[@LINE+4]]:31 = (#0 + #6) 170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 3, [[@LINE+3]]:24 -> [[@LINE+3]]:25 = (#0 + #6) 180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 3, [[@LINE+2]]:27 -> [[@LINE+2]]:29 = #7 190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 3, [[@LINE+1]]:39 -> [[@LINE+1]]:40 = (#0 + #6) 200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M2(x) do { if (x) {} } while (0) 210e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 4, [[@LINE+4]]:15 -> [[@LINE+4]]:38 = #0 220e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 4, [[@LINE+3]]:18 -> [[@LINE+3]]:28 = (#0 + #8) 230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: Expansion,File 4, [[@LINE+2]]:20 -> [[@LINE+2]]:22 = (#0 + #8) 240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 4, [[@LINE+1]]:36 -> [[@LINE+1]]:37 = (#0 + #8) 250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M3(x) do { M2(x); } while (0) 260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 5, [[@LINE+2]]:15 -> [[@LINE+2]]:27 = #0 270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 5, [[@LINE+1]]:23 -> [[@LINE+1]]:26 = #12 280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M4(x) ((x) && (x)) 290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 6, [[@LINE+2]]:15 -> [[@LINE+2]]:27 = #0 300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 6, [[@LINE+1]]:23 -> [[@LINE+1]]:26 = #14 310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M5(x) ((x) || (x)) 320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 7, [[@LINE+1]]:15 -> [[@LINE+1]]:26 = #0 330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M6(x) ((x) + (x)) 340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 8, [[@LINE+1]]:15 -> [[@LINE+1]]:18 = #0 350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines#define M7(x) (x) 360e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// Check for the expansion of M2 within M3. 380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 9, {{[0-9]+}}:15 -> {{[0-9]+}}:41 = (#0 + #8) 390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 9, {{[0-9]+}}:18 -> {{[0-9]+}}:31 = ((#0 + #8) + #9) 400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 9, {{[0-9]+}}:24 -> {{[0-9]+}}:25 = ((#0 + #8) + #9) 410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 9, {{[0-9]+}}:27 -> {{[0-9]+}}:29 = #10 420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines// CHECK-NEXT: File 9, {{[0-9]+}}:39 -> {{[0-9]+}}:40 = ((#0 + #8) + #9) 430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 440e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesvoid func(int x) { 450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (x) {} 460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines M1; 470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines M2(!x); 480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines M2(x); 490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines M3(x); 500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (M4(x)) {} 510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (M5(x)) {} 520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (M6(x)) {} 530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines if (M7(x)) {} 540e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 550e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 560e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesint main(int argc, const char *argv[]) { 570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines func(0); 580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 59