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