xref: /aosp_15_r20/external/clang/test/Frontend/rewrite-includes.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
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