1 // RUN: clang -x assembler-with-cpp -E %s > %t &&
2 
3 #ifndef __ASSEMBLER__
4 #error "__ASSEMBLER__ not defined"
5 #endif
6 
7 
8 // Invalid token pasting is ok.
9 // RUN: grep '1: X .' %t &&
10 #define A X ## .
11 1: A
12 
13 // Line markers are not linemarkers in .S files, they are passed through.
14 // RUN: grep '# 321' %t &&
15 # 321
16 
17 // Unknown directives are passed through.
18 // RUN: grep '# B C' %t &&
19 # B C
20 
21 // Unknown directives are expanded.
22 // RUN: grep '# BAR42' %t &&
23 #define D(x) BAR ## x
24 # D(42)
25 
26 // Unmatched quotes are permitted.
27 // RUN: grep "2: '" %t &&
28 // RUN: grep '3: "' %t &&
29 2: '
30 3: "
31 
32 // Empty char literals are ok.
33 // RUN: grep "4: ''" %t &&
34 4: ''
35 
36 
37 // Portions of invalid pasting should still expand as macros.
38 // rdar://6709206
39 // RUN: grep "5: expanded (" %t &&
40 #define M4 expanded
41 #define	M5() M4 ## (
42 
43 5: M5()
44 
45 
46 
47 // RUN: true
48