Nico Weber | 446cf25 | 2015-12-29 23:06:17 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -verify -fms-extensions -Wmicrosoft %s |
Rafael Espindola | 925213b | 2013-07-04 16:16:58 +0000 | [diff] [blame] | 2 | // RUN: not %clang_cc1 -P -E -fms-extensions %s | FileCheck -strict-whitespace %s |
Chris Lattner | 52c00bd | 2010-07-17 16:24:30 +0000 | [diff] [blame] | 3 | |
Chris Lattner | 3b5054d | 2008-02-07 06:03:59 +0000 | [diff] [blame] | 4 | // This horrible stuff should preprocess into (other than whitespace): |
| 5 | // int foo; |
| 6 | // int bar; |
| 7 | // int baz; |
| 8 | |
| 9 | int foo; |
| 10 | |
Edward O'Callaghan | f78edf5 | 2009-10-27 02:36:32 +0000 | [diff] [blame] | 11 | // CHECK: int foo; |
| 12 | |
Chris Lattner | 3b5054d | 2008-02-07 06:03:59 +0000 | [diff] [blame] | 13 | #define comment /##/ dead tokens live here |
Nico Weber | 446cf25 | 2015-12-29 23:06:17 +0000 | [diff] [blame] | 14 | // expected-warning@+1 {{pasting two '/' tokens}} |
Chris Lattner | 3b5054d | 2008-02-07 06:03:59 +0000 | [diff] [blame] | 15 | comment This is stupidity |
| 16 | |
| 17 | int bar; |
| 18 | |
Edward O'Callaghan | f78edf5 | 2009-10-27 02:36:32 +0000 | [diff] [blame] | 19 | // CHECK: int bar; |
| 20 | |
Chris Lattner | 3b5054d | 2008-02-07 06:03:59 +0000 | [diff] [blame] | 21 | #define nested(x) int x comment cute little dead tokens... |
| 22 | |
Nico Weber | 446cf25 | 2015-12-29 23:06:17 +0000 | [diff] [blame] | 23 | // expected-warning@+1 {{pasting two '/' tokens}} |
Chris Lattner | 3b5054d | 2008-02-07 06:03:59 +0000 | [diff] [blame] | 24 | nested(baz) rise of the dead tokens |
| 25 | |
| 26 | ; |
| 27 | |
Edward O'Callaghan | f78edf5 | 2009-10-27 02:36:32 +0000 | [diff] [blame] | 28 | // CHECK: int baz |
| 29 | // CHECK: ; |
| 30 | |
Chris Lattner | 52c00bd | 2010-07-17 16:24:30 +0000 | [diff] [blame] | 31 | |
| 32 | // rdar://8197149 - VC++ allows invalid token pastes: (##baz |
| 33 | #define foo(x) abc(x) |
| 34 | #define bar(y) foo(##baz(y)) |
Nico Weber | 446cf25 | 2015-12-29 23:06:17 +0000 | [diff] [blame] | 35 | bar(q) // expected-warning {{type specifier missing}} expected-error {{invalid preprocessing token}} expected-error {{parameter list without types}} |
Chris Lattner | 52c00bd | 2010-07-17 16:24:30 +0000 | [diff] [blame] | 36 | |
| 37 | // CHECK: abc(baz(q)) |
Will Wilson | db2588a | 2015-04-17 12:43:57 +0000 | [diff] [blame] | 38 | |
| 39 | |
| 40 | #define str(x) #x |
| 41 | #define collapse_spaces(a, b, c, d) str(a ## - ## b ## - ## c ## d) |
Nico Weber | 446cf25 | 2015-12-29 23:06:17 +0000 | [diff] [blame] | 42 | collapse_spaces(1a, b2, 3c, d4) // expected-error 4 {{invalid preprocessing token}} expected-error {{expected function body}} |
Will Wilson | db2588a | 2015-04-17 12:43:57 +0000 | [diff] [blame] | 43 | |
| 44 | // CHECK: "1a-b2-3cd4" |