assembler-with-cpp.c revision f5db8f82d5e3b1be3540775329ccd95449fe8721
1f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=0 -E %s > %t &&
25bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar
35bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#ifndef __ASSEMBLER__
45bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#error "__ASSEMBLER__ not defined"
55bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#endif
6e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
7e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
8e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Invalid token pasting is ok.
9e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '1: X .' %t &&
10e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner#define A X ## .
11e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner1: A
12e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
13e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Line markers are not linemarkers in .S files, they are passed through.
14e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# 321' %t &&
15e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# 321
16e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
17e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are passed through.
18e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# B C' %t &&
19e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# B C
20e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
21e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are expanded.
22e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# BAR42' %t &&
23e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner#define D(x) BAR ## x
24e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# D(42)
25e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
26e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unmatched quotes are permitted.
27e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep "2: '" %t &&
28e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '3: "' %t &&
29e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner2: '
30e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner3: "
31e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
32e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Empty char literals are ok.
33e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep "4: ''" %t &&
34e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner4: ''
35e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
36f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
37f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// Portions of invalid pasting should still expand as macros.
38f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// rdar://6709206
39f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// RUN: grep "5: expanded (" %t &&
40f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner#define M4 expanded
41f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner#define	M5() M4 ## (
42f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
43f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner5: M5()
44f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
45f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// rdar://6804322
46f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: grep -F "6: blarg $foo" %t &&
47f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name)  name ## $foo
48f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner6: FOO(blarg)
49f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner
50f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=1 -E %s > %t &&
51f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: grep -F "7: blarg$foo" %t &&
52f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name)  name ## $foo
53f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner7: FOO(blarg)
54f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
55f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
56e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: true
57