12ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar/* Clang supports a very limited subset of -traditional-cpp, basically we only
22ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar * intend to add support for things that people actually rely on when doing
32ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar * things like using /usr/bin/cpp to preprocess non-source files. */
42ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar
52ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar/*
62ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar RUN: %clang_cc1 -traditional-cpp %s -E -o %t
76aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose RUN: FileCheck -strict-whitespace < %t %s
8cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose RUN: %clang_cc1 -traditional-cpp %s -E -C | FileCheck -check-prefix=CHECK-COMMENTS %s
92ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar*/
102ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar
11cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose/* -traditional-cpp should eliminate all C89 comments. */
12cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose/* CHECK-NOT: /*
13cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose * CHECK-COMMENTS: {{^}}/* -traditional-cpp should eliminate all C89 comments. *{{/$}}
14cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose */
15cf2c2e9588a12a716615850cc5bfacd9b20f68efJordan Rose
166aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* CHECK: {{^}}foo // bar{{$}}
172ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbar */
182ed42287b9b88a0bb08ab10e95e306da3f294ba9Daniel Dunbarfoo // bar
196aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
206aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
216aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* The lines in this file contain hard tab characters and trailing whitespace;
226aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * do not change them! */
236aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
246aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* CHECK: {{^}}	indented!{{$}}
256aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK: {{^}}tab	separated	values{{$}}
266aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
276aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose	indented!
286aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosetab	separated	values
296aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
306aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose#define bracket(x) >>>x<<<
316aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosebracket(|  spaces  |)
326aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* CHECK: {{^}}>>>|  spaces  |<<<{{$}}
336aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
346aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
356aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* This is still a preprocessing directive. */
366aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose# define foo bar
376aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosefoo!
386aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose-
396aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose	foo!	foo!
406aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* CHECK: {{^}}bar!{{$}}
416aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK: {{^}}	bar!	bar!	{{$}}
426aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
436aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
446aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* Deliberately check a leading newline with spaces on that line. */
456aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
466aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose# define foo bar
476aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosefoo!
486aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose-
496aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose	foo!	foo!
506aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* CHECK: {{^}}bar!{{$}}
516aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK: {{^}}	bar!	bar!	{{$}}
526aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
536aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
546aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* FIXME: -traditional-cpp should not consider this a preprocessing directive
556aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * because the # isn't in the first column.
566aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
576aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose #define foo2 bar
586aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosefoo2!
596aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* If this were working, both of these checks would be on.
606aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK-NOT: {{^}} #define foo2 bar{{$}}
616aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK-NOT: {{^}}foo2!{{$}}
626aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
636aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose
646aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* FIXME: -traditional-cpp should not homogenize whitespace in macros.
656aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
666aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose#define bracket2(x) >>>  x  <<<
676aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rosebracket2(spaces)
686aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose/* If this were working, this check would be on.
696aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose * CHECK-NOT: {{^}}>>>  spaces  <<<{{$}}
706aad4a31b35df07fe818f193fcfd3c0197aea467Jordan Rose */
71c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose
72c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose
73c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose/* Check that #if 0 blocks work as expected */
74c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose#if 0
75c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose#error "this is not an error"
76c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose
77c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose#if 1
78c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rosea b c in skipped block
79c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose#endif
80c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose
81c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose/* Comments are whitespace too */
82c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose
83c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose#endif
84c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose/* CHECK-NOT: {{^}}a b c in skipped block{{$}}
85c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose * CHECK-NOT: {{^}}/* Comments are whitespace too
86c7d1ca52ae1f33a105ad1be217304f74a34c45f3Jordan Rose */
87693fdfa069b74ffe1f79caa3c9ea8754555d29bdJordan Rose
88693fdfa069b74ffe1f79caa3c9ea8754555d29bdJordan RosePreserve URLs: http://clang.llvm.org
89693fdfa069b74ffe1f79caa3c9ea8754555d29bdJordan Rose/* CHECK: {{^}}Preserve URLs: http://clang.llvm.org{{$}}
90693fdfa069b74ffe1f79caa3c9ea8754555d29bdJordan Rose */
91