summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-04-19 20:06:32 +0000
committerChris Lattner <sabre@nondot.org>2009-04-19 20:06:32 +0000
commitda4ebb8921fc945e0823788e26603b177ac71aff (patch)
tree074294d79c860ec0b8a6d331fdeabe5c29603bbd /clang
parent3b7ef5e3743810896a832fa798a687ea682e4e49 (diff)
downloadbcm5719-llvm-da4ebb8921fc945e0823788e26603b177ac71aff.tar.gz
bcm5719-llvm-da4ebb8921fc945e0823788e26603b177ac71aff.zip
Fix PR3918: Invalid use of __VA_ARGS__ not diagnosed,
by rejecting invalid poisoned tokens in the token pasting path. llvm-svn: 69536
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Lex/TokenLexer.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/clang/lib/Lex/TokenLexer.cpp b/clang/lib/Lex/TokenLexer.cpp
index ec48690b35b..8cec4332217 100644
--- a/clang/lib/Lex/TokenLexer.cpp
+++ b/clang/lib/Lex/TokenLexer.cpp
@@ -457,7 +457,6 @@ bool TokenLexer::PasteTokens(Token &Tok) {
// operator.
if (Result.is(tok::hashhash))
Result.setKind(tok::unknown);
- // FIXME: Turn __VA_ARGS__ into "not a token"?
}
// Transfer properties of the LHS over the the Result.
@@ -475,7 +474,19 @@ bool TokenLexer::PasteTokens(Token &Tok) {
if (Tok.is(tok::identifier)) {
// Look up the identifier info for the token. We disabled identifier lookup
// by saying we're skipping contents, so we need to do this manually.
- Tok.setIdentifierInfo(PP.LookUpIdentifierInfo(Tok, ResultTokStrPtr));
+ IdentifierInfo *II = PP.LookUpIdentifierInfo(Tok, ResultTokStrPtr);
+ Tok.setIdentifierInfo(II);
+
+ // If this identifier was poisoned, emit an error. This won't be handled by
+ // Preprocessor::HandleIdentifier because this is coming from a macro
+ // expansion.
+ if (II->isPoisoned()) {
+ // We warn about __VA_ARGS__ with poisoning.
+ if (II->isStr("__VA_ARGS__"))
+ PP.Diag(Tok, diag::ext_pp_bad_vaargs_use);
+ else
+ PP.Diag(Tok, diag::err_pp_used_poisoned_id);
+ }
}
return false;
}
OpenPOWER on IntegriCloud