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