1*67e74705SXin Li // RUN: not %clang_cc1 -verify -E -frewrite-includes -DFIRST -I %S/Inputs %s -o - | FileCheck -strict-whitespace %s 2*67e74705SXin Li // RUN: not %clang_cc1 -verify -E -frewrite-includes -P -DFIRST -I %S/Inputs %s -o - | FileCheck -check-prefix=CHECKNL -strict-whitespace %s 3*67e74705SXin Li // STARTCOMPARE 4*67e74705SXin Li #define A(a,b) a ## b 5*67e74705SXin Li A(1,2) 6*67e74705SXin Li #include "rewrite-includes1.h" 7*67e74705SXin Li #ifdef FIRST 8*67e74705SXin Li #define HEADER "rewrite-includes3.h" 9*67e74705SXin Li #include HEADER 10*67e74705SXin Li #else 11*67e74705SXin Li #include "rewrite-includes4.h" 12*67e74705SXin Li #endif 13*67e74705SXin Li // indented 14*67e74705SXin Li #/**/include /**/ "rewrite-includes5.h" /**/ \ 15*67e74705SXin Li 16*67e74705SXin Li #include "rewrite-includes6.h" // comment 17*67e74705SXin Li 18*67e74705SXin Li #include "rewrite-includes6.h" /* comment 19*67e74705SXin Li continues */ 20*67e74705SXin Li #include "rewrite-includes7.h" 21*67e74705SXin Li #include "rewrite-includes7.h" 22*67e74705SXin Li #include "rewrite-includes8.h" 23*67e74705SXin Li // ENDCOMPARE 24*67e74705SXin Li // CHECK: {{^}}# 1 "{{.*}}rewrite-includes.c"{{$}} 25*67e74705SXin Li // CHECK: {{^}}// STARTCOMPARE{{$}} 26*67e74705SXin Li // CHECK-NEXT: {{^}}#define A(a,b) a ## b{{$}} 27*67e74705SXin Li // CHECK-NEXT: {{^}}A(1,2){{$}} 28*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 29*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes1.h"{{$}} 30*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 31*67e74705SXin Li // CHECK-NEXT: {{^}}# 6 "{{.*}}rewrite-includes.c"{{$}} 32*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes1.h" 1{{$}} 33*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 34*67e74705SXin Li // CHECK-NEXT: {{^}}#pragma clang system_header{{$}} 35*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 36*67e74705SXin Li // CHECK-NEXT: {{^}}# 2 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes1.h" 3{{$}} 37*67e74705SXin Li // CHECK-NEXT: {{^}}included_line1{{$}} 38*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 39*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes2.h"{{$}} 40*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 41*67e74705SXin Li // CHECK-NEXT: {{^}}# 3 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes1.h" 3{{$}} 42*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes2.h" 1 3{{$}} 43*67e74705SXin Li // CHECK-NEXT: {{^}}included_line2{{$}} 44*67e74705SXin Li // CHECK-NEXT: {{^}}# 4 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes1.h" 2 3{{$}} 45*67e74705SXin Li // CHECK-NEXT: {{^}}# 7 "{{.*}}rewrite-includes.c" 2{{$}} 46*67e74705SXin Li // CHECK-NEXT: {{^}}#ifdef FIRST{{$}} 47*67e74705SXin Li // CHECK-NEXT: {{^}}#define HEADER "rewrite-includes3.h"{{$}} 48*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 49*67e74705SXin Li // CHECK-NEXT: {{^}}#include HEADER{{$}} 50*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 51*67e74705SXin Li // CHECK-NEXT: {{^}}# 9 "{{.*}}rewrite-includes.c"{{$}} 52*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes3.h" 1{{$}} 53*67e74705SXin Li // CHECK-NEXT: {{^}}included_line3{{$}} 54*67e74705SXin Li // CHECK-NEXT: {{^}}# 10 "{{.*}}rewrite-includes.c" 2{{$}} 55*67e74705SXin Li // CHECK-NEXT: {{^}}#else{{$}} 56*67e74705SXin Li // CHECK-NEXT: {{^}}# 11 "{{.*}}rewrite-includes.c"{{$}} 57*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 58*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes4.h"{{$}} 59*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 60*67e74705SXin Li // CHECK-NEXT: {{^}}# 11 "{{.*}}rewrite-includes.c"{{$}} 61*67e74705SXin Li // CHECK-NEXT: {{^}}# 12 "{{.*}}rewrite-includes.c"{{$}} 62*67e74705SXin Li // CHECK-NEXT: {{^}}#endif{{$}} 63*67e74705SXin Li // CHECK-NEXT: {{^}}# 13 "{{.*}}rewrite-includes.c"{{$}} 64*67e74705SXin Li // CHECK-NEXT: {{^}} // indented{{$}} 65*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 66*67e74705SXin Li // CHECK-NEXT: {{^}}#/**/include /**/ "rewrite-includes5.h" /**/ {{\\}}{{$}} 67*67e74705SXin Li // CHECK-NEXT: {{^}} {{$}} 68*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 69*67e74705SXin Li // CHECK-NEXT: {{^}}# 15 "{{.*}}rewrite-includes.c"{{$}} 70*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes5.h" 1{{$}} 71*67e74705SXin Li // CHECK-NEXT: {{^}}included_line5{{$}} 72*67e74705SXin Li // CHECK-NEXT: {{^}}# 16 "{{.*}}rewrite-includes.c" 2{{$}} 73*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 74*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes6.h" // comment{{$}} 75*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 76*67e74705SXin Li // CHECK-NEXT: {{^}}# 16 "{{.*}}rewrite-includes.c"{{$}} 77*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes6.h" 1{{$}} 78*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 79*67e74705SXin Li // CHECK-NEXT: {{^}}#pragma once{{$}} 80*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 81*67e74705SXin Li // CHECK-NEXT: {{^}}# 2 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes6.h"{{$}} 82*67e74705SXin Li // CHECK-NEXT: {{^}}included_line6{{$}} 83*67e74705SXin Li // CHECK-NEXT: {{^}}# 17 "{{.*}}rewrite-includes.c" 2{{$}} 84*67e74705SXin Li // CHECK-NEXT: {{^}} {{$}} 85*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 86*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes6.h" /* comment{{$}} 87*67e74705SXin Li // CHECK-NEXT: {{^}} continues */{{$}} 88*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 89*67e74705SXin Li // CHECK-NEXT: {{^}}# 19 "{{.*}}rewrite-includes.c"{{$}} 90*67e74705SXin Li // CHECK-NEXT: {{^}}# 20 "{{.*}}rewrite-includes.c"{{$}} 91*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 92*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes7.h"{{$}} 93*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 94*67e74705SXin Li // CHECK-NEXT: {{^}}# 20 "{{.*}}rewrite-includes.c"{{$}} 95*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes7.h" 1{{$}} 96*67e74705SXin Li // CHECK-NEXT: {{^}}#ifndef REWRITE_INCLUDES_7{{$}} 97*67e74705SXin Li // CHECK-NEXT: {{^}}#define REWRITE_INCLUDES_7{{$}} 98*67e74705SXin Li // CHECK-NEXT: {{^}}included_line7{{$}} 99*67e74705SXin Li // CHECK-NEXT: {{^}}#endif{{$}} 100*67e74705SXin Li // CHECK-NEXT: {{^}}# 5 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes7.h"{{$}} 101*67e74705SXin Li // CHECK-NEXT: {{^}}# 21 "{{.*}}rewrite-includes.c" 2{{$}} 102*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 103*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes7.h"{{$}} 104*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 105*67e74705SXin Li // CHECK-NEXT: {{^}}# 21 "{{.*}}rewrite-includes.c"{{$}} 106*67e74705SXin Li // CHECK-NEXT: {{^}}# 22 "{{.*}}rewrite-includes.c"{{$}} 107*67e74705SXin Li // CHECK-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 108*67e74705SXin Li // CHECK-NEXT: {{^}}#include "rewrite-includes8.h"{{$}} 109*67e74705SXin Li // CHECK-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 110*67e74705SXin Li // CHECK-NEXT: {{^}}# 22 "{{.*}}rewrite-includes.c"{{$}} 111*67e74705SXin Li // CHECK-NEXT: {{^}}# 1 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes8.h" 1{{$}} 112*67e74705SXin Li // CHECK-NEXT: {{^}}#if (1)/*__has_include_next(<rewrite-includes8.h>)*/{{$}} 113*67e74705SXin Li // CHECK-NEXT: {{^}}#elif (0)/*__has_include(<rewrite-includes8.hfail>)*/{{$}} 114*67e74705SXin Li // CHECK-NEXT: {{^}}# 3 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes8.h"{{$}} 115*67e74705SXin Li // CHECK-NEXT: {{^}}#endif{{$}} 116*67e74705SXin Li // CHECK-NEXT: {{^}}# 4 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes8.h"{{$}} 117*67e74705SXin Li // CHECK-NEXT: {{^}}#if !(1)/*__has_include("rewrite-includes8.h")*/{{$}} 118*67e74705SXin Li // CHECK-NEXT: {{^}}#endif{{$}} 119*67e74705SXin Li // CHECK-NEXT: {{^}}# 6 "{{.*[/\\]Inputs(/|\\\\)}}rewrite-includes8.h"{{$}} 120*67e74705SXin Li // CHECK-NEXT: {{^}}# 23 "{{.*}}rewrite-includes.c" 2{{$}} 121*67e74705SXin Li // CHECK-NEXT: {{^}}// ENDCOMPARE{{$}} 122*67e74705SXin Li 123*67e74705SXin Li // CHECKNL: {{^}}// STARTCOMPARE{{$}} 124*67e74705SXin Li // CHECKNL-NEXT: {{^}}#define A(a,b) a ## b{{$}} 125*67e74705SXin Li // CHECKNL-NEXT: {{^}}A(1,2){{$}} 126*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 127*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes1.h"{{$}} 128*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 129*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 130*67e74705SXin Li // CHECKNL-NEXT: {{^}}#pragma clang system_header{{$}} 131*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 132*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line1{{$}} 133*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 134*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes2.h"{{$}} 135*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 136*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line2{{$}} 137*67e74705SXin Li // CHECKNL-NEXT: {{^}}#ifdef FIRST{{$}} 138*67e74705SXin Li // CHECKNL-NEXT: {{^}}#define HEADER "rewrite-includes3.h"{{$}} 139*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 140*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include HEADER{{$}} 141*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 142*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line3{{$}} 143*67e74705SXin Li // CHECKNL-NEXT: {{^}}#else{{$}} 144*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 145*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes4.h"{{$}} 146*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 147*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif{{$}} 148*67e74705SXin Li // CHECKNL-NEXT: {{^}} // indented{{$}} 149*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 150*67e74705SXin Li // CHECKNL-NEXT: {{^}}#/**/include /**/ "rewrite-includes5.h" /**/ {{\\}}{{$}} 151*67e74705SXin Li // CHECKNL-NEXT: {{^}} {{$}} 152*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 153*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line5{{$}} 154*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 155*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes6.h" // comment{{$}} 156*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 157*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 158*67e74705SXin Li // CHECKNL-NEXT: {{^}}#pragma once{{$}} 159*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 160*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line6{{$}} 161*67e74705SXin Li // CHECKNL-NEXT: {{^}} {{$}} 162*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 163*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes6.h" /* comment{{$}} 164*67e74705SXin Li // CHECKNL-NEXT: {{^}} continues */{{$}} 165*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 166*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 167*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes7.h"{{$}} 168*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 169*67e74705SXin Li // CHECKNL-NEXT: {{^}}#ifndef REWRITE_INCLUDES_7{{$}} 170*67e74705SXin Li // CHECKNL-NEXT: {{^}}#define REWRITE_INCLUDES_7{{$}} 171*67e74705SXin Li // CHECKNL-NEXT: {{^}}included_line7{{$}} 172*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif{{$}} 173*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 174*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes7.h"{{$}} 175*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 176*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if 0 /* expanded by -frewrite-includes */{{$}} 177*67e74705SXin Li // CHECKNL-NEXT: {{^}}#include "rewrite-includes8.h"{{$}} 178*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif /* expanded by -frewrite-includes */{{$}} 179*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if (1)/*__has_include_next(<rewrite-includes8.h>)*/{{$}} 180*67e74705SXin Li // CHECKNL-NEXT: {{^}}#elif (0)/*__has_include(<rewrite-includes8.hfail>)*/{{$}} 181*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif{{$}} 182*67e74705SXin Li // CHECKNL-NEXT: {{^}}#if !(1)/*__has_include("rewrite-includes8.h")*/{{$}} 183*67e74705SXin Li // CHECKNL-NEXT: {{^}}#endif{{$}} 184*67e74705SXin Li // CHECKNL-NEXT: {{^}}// ENDCOMPARE{{$}} 185