forked from OSchip/llvm-project
Fix PR3918: Invalid use of __VA_ARGS__ not diagnosed,
by rejecting invalid poisoned tokens in the token pasting path. llvm-svn: 69536
This commit is contained in:
parent
3b7ef5e374
commit
da4ebb8921
|
@ -457,7 +457,6 @@ bool TokenLexer::PasteTokens(Token &Tok) {
|
||||||
// operator.
|
// operator.
|
||||||
if (Result.is(tok::hashhash))
|
if (Result.is(tok::hashhash))
|
||||||
Result.setKind(tok::unknown);
|
Result.setKind(tok::unknown);
|
||||||
// FIXME: Turn __VA_ARGS__ into "not a token"?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Transfer properties of the LHS over the the Result.
|
// Transfer properties of the LHS over the the Result.
|
||||||
|
@ -475,7 +474,19 @@ bool TokenLexer::PasteTokens(Token &Tok) {
|
||||||
if (Tok.is(tok::identifier)) {
|
if (Tok.is(tok::identifier)) {
|
||||||
// Look up the identifier info for the token. We disabled identifier lookup
|
// 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.
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue