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