aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-23 17:32:45 +0000
committerChris Lattner <sabre@nondot.org>2009-03-23 17:32:45 +0000
commitf1538de18370c202263d7d1bc326cbc2c5434e1d (patch)
tree9d9af3edd60f7d9fa61b66f463c840b8ed80ed78
parent68ac94a8d7c7a967ace59c565736d07e80de77e7 (diff)
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
-rw-r--r--lib/Lex/TokenLexer.cpp4
-rw-r--r--test/Preprocessor/assembler-with-cpp.c11
2 files changed, 14 insertions, 1 deletions
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