13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -P -E -fms-extensions %s | FileCheck -strict-whitespace %s
267cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner
364b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner// This horrible stuff should preprocess into (other than whitespace):
464b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner//   int foo;
564b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner//   int bar;
664b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner//   int baz;
764b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
864b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattnerint foo;
964b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
10170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan// CHECK: int foo;
11170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan
1264b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner#define comment /##/  dead tokens live here
1364b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattnercomment This is stupidity
1464b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
1564b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattnerint bar;
1664b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
17170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan// CHECK: int bar;
18170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan
1964b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner#define nested(x) int x comment cute little dead tokens...
2064b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
2164b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattnernested(baz)  rise of the dead tokens
2264b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
2364b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner;
2464b32ecc7a2d768b96d2f6d98d247bd7c3f01b4dChris Lattner
25170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan// CHECK: int baz
26170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan// CHECK: ;
27170548aa344c9c0b20b660d44114af723b3987fcEdward O'Callaghan
2867cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner
2967cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner// rdar://8197149 - VC++ allows invalid token pastes: (##baz
3067cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner#define foo(x) abc(x)
3167cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner#define bar(y) foo(##baz(y))
3267cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattnerbar(q)
3367cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner
3467cdc7bd9a53d7fd7d72310e2b169eba5f89fb6fChris Lattner// CHECK: abc(baz(q))
35