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