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