summaryrefslogtreecommitdiffstats
path: root/clang/lib/Lex/PPDirectives.cpp
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2019-04-11 21:18:22 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2019-04-11 21:18:22 +0000
commit75f9681874252ac96db002a80df4202ec2cdd2f8 (patch)
treef5f585fac34b89251395afacd92b5f94bd338f71 /clang/lib/Lex/PPDirectives.cpp
parent6ffa1511eaedfae67ea4c66c2264b46eaccbbd7d (diff)
downloadbcm5719-llvm-75f9681874252ac96db002a80df4202ec2cdd2f8.tar.gz
bcm5719-llvm-75f9681874252ac96db002a80df4202ec2cdd2f8.zip
Remove use of lookahead from _Pragma handling and from all other
internal lexing steps in the preprocessor. It is not safe to use the preprocessor's token lookahead except when operating on the final sequence of tokens that would be produced by phase 4 of translation. Doing so corrupts the token lookahead cache used by the parser. (See added testcase for an example.) Lookahead should instead be viewed as a layer on top of the normal lexer. Added assertions to catch any further incorrect uses of lookahead within lexing actions. llvm-svn: 358230
Diffstat (limited to 'clang/lib/Lex/PPDirectives.cpp')
-rw-r--r--clang/lib/Lex/PPDirectives.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPDirectives.cpp b/clang/lib/Lex/PPDirectives.cpp
index 3aae6ae245f..216ae39632d 100644
--- a/clang/lib/Lex/PPDirectives.cpp
+++ b/clang/lib/Lex/PPDirectives.cpp
@@ -829,10 +829,10 @@ void Preprocessor::HandleSkippedDirectiveWhileUsingPCH(Token &Result,
return HandleIncludeDirective(HashLoc, Result);
}
if (SkippingUntilPragmaHdrStop && II->getPPKeywordID() == tok::pp_pragma) {
- Token P = LookAhead(0);
- auto *II = P.getIdentifierInfo();
+ Lex(Result);
+ auto *II = Result.getIdentifierInfo();
if (II && II->getName() == "hdrstop")
- return HandlePragmaDirective(HashLoc, PIK_HashPragma);
+ return HandlePragmaHdrstop(Result);
}
}
DiscardUntilEndOfDirective();
OpenPOWER on IntegriCloud