xref: /llvm-project/clang/test/Preprocessor/assembler-with-cpp.c (revision 0721c2c155882008d2d5ad6b659d7eedaa380fe4)
1 // RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=0 -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 // (balance quotes to keep editors happy): "'
33 
34 // Empty char literals are ok.
35 // RUN: grep "4: ''" %t &&
36 4: ''
37 
38 
39 // Portions of invalid pasting should still expand as macros.
40 // rdar://6709206
41 // RUN: grep "5: expanded (" %t &&
42 #define M4 expanded
43 #define	M5() M4 ## (
44 
45 5: M5()
46 
47 // rdar://6804322
48 // RUN: grep -F "6: blarg $foo" %t &&
49 #define FOO(name)  name ## $foo
50 6: FOO(blarg)
51 
52 // RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=1 -E %s > %t &&
53 // RUN: grep -F "7: blarg$foo" %t &&
54 #define FOO(name)  name ## $foo
55 7: FOO(blarg)
56 
57 
58 //
59 #define T6() T6 #nostring
60 #define T7(x) T7 #x
61 T6()
62 T7(foo)
63 // RUN: grep 'T6 #nostring' %t &&
64 // RUN: grep 'T7 "foo"' %t &&
65 
66 // RUN: true
67