18fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -x assembler-with-cpp -E %s -o - | FileCheck -strict-whitespace -check-prefix=CHECK-Identifiers-False %s 2c4867109SChris Lattner 3c4867109SChris Lattner #ifndef __ASSEMBLER__ 4c4867109SChris Lattner #error "__ASSEMBLER__ not defined" 5c4867109SChris Lattner #endif 688c34744SChris Lattner 788c34744SChris Lattner 888c34744SChris Lattner // Invalid token pasting is ok. 988c34744SChris Lattner #define A X ## . 1088c34744SChris Lattner 1: A 117cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 1: X . 1288c34744SChris Lattner 1388c34744SChris Lattner // Line markers are not linemarkers in .S files, they are passed through. 1488c34744SChris Lattner # 321 157cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: # 321 1688c34744SChris Lattner 1788c34744SChris Lattner // Unknown directives are passed through. 1888c34744SChris Lattner # B C 197cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: # B C 2088c34744SChris Lattner 2188c34744SChris Lattner // Unknown directives are expanded. 2288c34744SChris Lattner #define D(x) BAR ## x 2388c34744SChris Lattner # D(42) 247cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: # BAR42 2588c34744SChris Lattner 2688c34744SChris Lattner // Unmatched quotes are permitted. 2788c34744SChris Lattner 2: ' 2888c34744SChris Lattner 3: " 297cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 2: ' 307cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 3: " 3188c34744SChris Lattner 320721c2c1SDaniel Dunbar // (balance quotes to keep editors happy): "' 330721c2c1SDaniel Dunbar 3488c34744SChris Lattner // Empty char literals are ok. 3588c34744SChris Lattner 4: '' 367cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 4: '' 3788c34744SChris Lattner 385030e5eaSChris Lattner 395030e5eaSChris Lattner // Portions of invalid pasting should still expand as macros. 405030e5eaSChris Lattner // rdar://6709206 415030e5eaSChris Lattner #define M4 expanded 425030e5eaSChris Lattner #define M5() M4 ## ( 435030e5eaSChris Lattner 445030e5eaSChris Lattner 5: M5() 457cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 5: expanded ( 465030e5eaSChris Lattner 4798b10059SChris Lattner // rdar://6804322 4898b10059SChris Lattner #define FOO(name) name ## $foo 4998b10059SChris Lattner 6: FOO(blarg) 507cd5c818SEdward O'Callaghan // CHECK-Identifiers-False: 6: blarg $foo 5198b10059SChris Lattner 528fbe78f6SDaniel Dunbar // RUN: %clang_cc1 -x assembler-with-cpp -fdollars-in-identifiers -E %s -o - | FileCheck -check-prefix=CHECK-Identifiers-True -strict-whitespace %s 5398b10059SChris Lattner #define FOO(name) name ## $foo 5498b10059SChris Lattner 7: FOO(blarg) 557cd5c818SEdward O'Callaghan // CHECK-Identifiers-True: 7: blarg$foo 565030e5eaSChris Lattner 570721c2c1SDaniel Dunbar // 580721c2c1SDaniel Dunbar #define T6() T6 #nostring 590721c2c1SDaniel Dunbar #define T7(x) T7 #x 6083bd8281SChris Lattner 8: T6() 6183bd8281SChris Lattner 9: T7(foo) 627cd5c818SEdward O'Callaghan // CHECK-Identifiers-True: 8: T6 #nostring 637cd5c818SEdward O'Callaghan // CHECK-Identifiers-True: 9: T7 "foo" 640721c2c1SDaniel Dunbar 652d49c4f9SEli Friedman // Concatenation with period doesn't leave a space 662d49c4f9SEli Friedman #define T8(A,B) A ## B 6783bd8281SChris Lattner 10: T8(.,T8) 687cd5c818SEdward O'Callaghan // CHECK-Identifiers-True: 10: .T8 6983bd8281SChris Lattner 7083bd8281SChris Lattner // This should not crash. 7183bd8281SChris Lattner #define T11(a) #0 7283bd8281SChris Lattner 11: T11(b) 737cd5c818SEdward O'Callaghan // CHECK-Identifiers-True: 11: #0 742d49c4f9SEli Friedman 7553535130SJustin Bogner // Universal character names can specify basic ascii and control characters 76*4e80636dSCorentin Jabot 12: \u0020\u0030 77*4e80636dSCorentin Jabot // CHECK-Identifiers-False: 12: \u0020\u0030 7856f64c14SChris Lattner 7956f64c14SChris Lattner // This should not crash 8056f64c14SChris Lattner // rdar://8823139 8156f64c14SChris Lattner # ## 8256f64c14SChris Lattner // CHECK-Identifiers-False: # ## 83cdf8b882SEli Friedman 84cdf8b882SEli Friedman #define X(a) # # # 1 85cdf8b882SEli Friedman X(1) 86cdf8b882SEli Friedman // CHECK-Identifiers-False: # # # 1 87