2
0

rewrite-includes.c 9.9 KB

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