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