From: Chris Lattner Date: Mon, 23 Mar 2009 17:32:45 +0000 (+0000) Subject: The individual pieces of an invalid paste as still candidates for expansion. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f1538de18370c202263d7d1bc326cbc2c5434e1d;p=clang The individual pieces of an invalid paste as still candidates for expansion. This matters in assembler mode, where this is silently allowed. This fixes rdar://6709206. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67539 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Lex/TokenLexer.cpp b/lib/Lex/TokenLexer.cpp index 1935914e0e..ec48690b35 100644 --- a/lib/Lex/TokenLexer.cpp +++ b/lib/Lex/TokenLexer.cpp @@ -448,7 +448,9 @@ bool TokenLexer::PasteTokens(Token &Tok) { if (!PP.getLangOptions().AsmPreprocessor) PP.Diag(PasteOpLoc, diag::err_pp_bad_paste) << std::string(Buffer.begin(), Buffer.end()-1); - return false; + + // Do not consume the RHS. + --CurToken; } // Turn ## into 'unknown' to avoid # ## # from looking like a paste diff --git a/test/Preprocessor/assembler-with-cpp.c b/test/Preprocessor/assembler-with-cpp.c index 2f520ecf07..ecb77e5f96 100644 --- a/test/Preprocessor/assembler-with-cpp.c +++ b/test/Preprocessor/assembler-with-cpp.c @@ -33,4 +33,15 @@ // RUN: grep "4: ''" %t && 4: '' + +// Portions of invalid pasting should still expand as macros. +// rdar://6709206 +// RUN: grep "5: expanded (" %t && +#define M4 expanded +#define M5() M4 ## ( + +5: M5() + + + // RUN: true