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