1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -x assembler-with-cpp -E %s -o - | FileCheck -strict-whitespace -check-prefix=CHECK-Identifiers-False %s
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#define A X ## .
10e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner1: A
119b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 1: X .
12e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
13e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Line markers are not linemarkers in .S files, they are passed through.
14e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# 321
159b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: # 321
16e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
17e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are passed through.
18e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# B C
199b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: # B C
20e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
21e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are expanded.
22e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner#define D(x) BAR ## x
23e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# D(42)
249b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: # BAR42
25e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
26e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unmatched quotes are permitted.
27e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner2: '
28e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner3: "
299b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 2: '
309b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 3: "
31e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
32c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar// (balance quotes to keep editors happy): "'
33c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar
34e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Empty char literals are ok.
35e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner4: ''
369b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 4: ''
37e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner
38f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
39f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// Portions of invalid pasting should still expand as macros.
40f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// rdar://6709206
41f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner#define M4 expanded
421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump#define M5() M4 ## (
43f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
44f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner5: M5()
459b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 5: expanded (
46f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
47f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// rdar://6804322
48f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name)  name ## $foo
49f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner6: FOO(blarg)
509b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-False: 6: blarg $foo
51f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner
52a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -x assembler-with-cpp -fdollars-in-identifiers -E %s -o - | FileCheck -check-prefix=CHECK-Identifiers-True -strict-whitespace %s
53f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name)  name ## $foo
54f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner7: FOO(blarg)
559b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-True: 7: blarg$foo
56f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner
57c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar//
58c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar#define T6() T6 #nostring
59c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar#define T7(x) T7 #x
603240469102eca90fa5123ec9636fa0364df3034cChris Lattner8: T6()
613240469102eca90fa5123ec9636fa0364df3034cChris Lattner9: T7(foo)
629b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-True: 8: T6 #nostring
639b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-True: 9: T7 "foo"
64c25d8058958d9cda0d9d6216b475180ba2f7c71dDaniel Dunbar
654c3ba6c1944e6a4758f1b3a0aec8a7ff4c561051Eli Friedman// Concatenation with period doesn't leave a space
664c3ba6c1944e6a4758f1b3a0aec8a7ff4c561051Eli Friedman#define T8(A,B) A ## B
673240469102eca90fa5123ec9636fa0364df3034cChris Lattner10: T8(.,T8)
689b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-True: 10: .T8
693240469102eca90fa5123ec9636fa0364df3034cChris Lattner
703240469102eca90fa5123ec9636fa0364df3034cChris Lattner// This should not crash.
713240469102eca90fa5123ec9636fa0364df3034cChris Lattner#define T11(a) #0
723240469102eca90fa5123ec9636fa0364df3034cChris Lattner11: T11(b)
739b0cffe19ea19e29e3d868e25605278b0a48638bEdward O'Callaghan// CHECK-Identifiers-True: 11: #0
744c3ba6c1944e6a4758f1b3a0aec8a7ff4c561051Eli Friedman
75fbfd6426e256f8be081260609d8fa88ae94ffe14Justin Bogner// Universal character names can specify basic ascii and control characters
76fbfd6426e256f8be081260609d8fa88ae94ffe14Justin Bogner12: \u0020\u0030\u0080\u0000
77fbfd6426e256f8be081260609d8fa88ae94ffe14Justin Bogner// CHECK-Identifiers-False: 12: \u0020\u0030\u0080\u0000
78ba3ca5271a01eae7cbd6a19ace004d75012c02a8Chris Lattner
79ba3ca5271a01eae7cbd6a19ace004d75012c02a8Chris Lattner// This should not crash
80ba3ca5271a01eae7cbd6a19ace004d75012c02a8Chris Lattner// rdar://8823139
81ba3ca5271a01eae7cbd6a19ace004d75012c02a8Chris Lattner# ##
82ba3ca5271a01eae7cbd6a19ace004d75012c02a8Chris Lattner// CHECK-Identifiers-False: # ##
83995544ef901f70589025c278e112547966a1df09Eli Friedman
84995544ef901f70589025c278e112547966a1df09Eli Friedman#define X(a) # # # 1
85995544ef901f70589025c278e112547966a1df09Eli FriedmanX(1)
86995544ef901f70589025c278e112547966a1df09Eli Friedman// CHECK-Identifiers-False: # # # 1
87