aboutsummaryrefslogtreecommitdiff
path: root/Lex
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-09-24 05:14:57 +0000
committerChris Lattner <sabre@nondot.org>2007-09-24 05:14:57 +0000
commitf37bb25120f2b9532443aaee03b7a909eb27af9a (patch)
treedebb50c5fda1da5233b99bb4ae4dd0aeee94af5f /Lex
parent031b2d21fe1b0ad8c8fd927f654353035ed06562 (diff)
If we see an invalid #ifdef directive, enter a conditional compilation region
so that we don't emit an error on the #endif. Suggestion by Neil. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42258 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'Lex')
-rw-r--r--Lex/Preprocessor.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/Lex/Preprocessor.cpp b/Lex/Preprocessor.cpp
index b51222cefd..f43eae1c98 100644
--- a/Lex/Preprocessor.cpp
+++ b/Lex/Preprocessor.cpp
@@ -2121,8 +2121,13 @@ void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
ReadMacroName(MacroNameTok);
// Error reading macro name? If so, diagnostic already issued.
- if (MacroNameTok.getKind() == tok::eom)
+ if (MacroNameTok.getKind() == tok::eom) {
+ // Skip code until we get to #endif. This helps with recovery by not
+ // emitting an error when the #endif is reached.
+ SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
+ /*Foundnonskip*/false, /*FoundElse*/false);
return;
+ }
// Check to see if this is the last token on the #if[n]def line.
CheckEndOfDirective(isIfndef ? "#ifndef" : "#ifdef");