forked from OSchip/llvm-project
fix the "pasting formed 'a]', an invalid preprocessing token"
diagnostic to include the full instantiation location for the invalid paste. For: #define foo(a, b) a ## b #define bar(x) foo(x, ]) bar(a) bar(zdy) Instead of: t.c:3:22: error: pasting formed 'a]', an invalid preprocessing token #define foo(a, b) a ## b ^ t.c:3:22: error: pasting formed 'zdy]', an invalid preprocessing token we now produce: t.c:7:1: error: pasting formed 'a]', an invalid preprocessing token bar(a) ^ t.c:4:16: note: instantiated from: #define bar(x) foo(x, ]) ^ t.c:3:22: note: instantiated from: #define foo(a, b) a ## b ^ t.c:8:1: error: pasting formed 'zdy]', an invalid preprocessing token bar(zdy) ^ t.c:4:16: note: instantiated from: #define bar(x) foo(x, ]) ^ t.c:3:22: note: instantiated from: #define foo(a, b) a ## b ^ llvm-svn: 72519
This commit is contained in:
parent
1f906448bc
commit
7f4153dbee
|
@ -471,9 +471,16 @@ bool TokenLexer::PasteTokens(Token &Tok) {
|
|||
}
|
||||
|
||||
// Do not emit the warning when preprocessing assembler code.
|
||||
if (!PP.getLangOptions().AsmPreprocessor)
|
||||
PP.Diag(PasteOpLoc, diag::err_pp_bad_paste)
|
||||
if (!PP.getLangOptions().AsmPreprocessor) {
|
||||
// Explicitly convert the token location to have proper instantiation
|
||||
// information so that the user knows where it came from.
|
||||
SourceManager &SM = PP.getSourceManager();
|
||||
SourceLocation Loc =
|
||||
SM.createInstantiationLoc(PasteOpLoc, InstantiateLocStart,
|
||||
InstantiateLocEnd, 2);
|
||||
PP.Diag(Loc, diag::err_pp_bad_paste)
|
||||
<< std::string(Buffer.begin(), Buffer.end());
|
||||
}
|
||||
|
||||
// Do not consume the RHS.
|
||||
--CurToken;
|
||||
|
|
Loading…
Reference in New Issue