assembler-with-cpp.c revision f5db8f82d5e3b1be3540775329ccd95449fe8721
1f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=0 -E %s > %t && 25bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar 35bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#ifndef __ASSEMBLER__ 45bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#error "__ASSEMBLER__ not defined" 55bea06ad9e1e73937870e070197cb48e0c2eea87Daniel Dunbar#endif 6e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 7e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 8e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Invalid token pasting is ok. 9e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '1: X .' %t && 10e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner#define A X ## . 11e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner1: A 12e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 13e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Line markers are not linemarkers in .S files, they are passed through. 14e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# 321' %t && 15e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# 321 16e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 17e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are passed through. 18e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# B C' %t && 19e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# B C 20e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 21e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unknown directives are expanded. 22e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '# BAR42' %t && 23e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner#define D(x) BAR ## x 24e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner# D(42) 25e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 26e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Unmatched quotes are permitted. 27e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep "2: '" %t && 28e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep '3: "' %t && 29e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner2: ' 30e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner3: " 31e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 32e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// Empty char literals are ok. 33e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: grep "4: ''" %t && 34e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner4: '' 35e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner 36f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner 37f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// Portions of invalid pasting should still expand as macros. 38f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// rdar://6709206 39f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner// RUN: grep "5: expanded (" %t && 40f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner#define M4 expanded 41f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner#define M5() M4 ## ( 42f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner 43f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner5: M5() 44f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner 45f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// rdar://6804322 46f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: grep -F "6: blarg $foo" %t && 47f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name) name ## $foo 48f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner6: FOO(blarg) 49f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner 50f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: clang-cc -x assembler-with-cpp -fdollars-in-identifiers=1 -E %s > %t && 51f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner// RUN: grep -F "7: blarg$foo" %t && 52f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner#define FOO(name) name ## $foo 53f5db8f82d5e3b1be3540775329ccd95449fe8721Chris Lattner7: FOO(blarg) 54f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner 55f1538de18370c202263d7d1bc326cbc2c5434e1dChris Lattner 56e966d9ae3e2d0b021e6290f91fb90b28cf736d84Chris Lattner// RUN: true 57