forked from OSchip/llvm-project
Do not complain about junk on the end of a #endif in a skipped block. Such junk
is permitted by all relevant language standards. Patch by Andy Gibbs! llvm-svn: 158883
This commit is contained in:
parent
7bedfda489
commit
d0124578ee
|
@ -317,7 +317,6 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
|||
} else if (Directive[0] == 'e') {
|
||||
StringRef Sub = Directive.substr(1);
|
||||
if (Sub == "ndif") { // "endif"
|
||||
CheckEndOfDirective("endif");
|
||||
PPConditionalInfo CondInfo;
|
||||
CondInfo.WasSkipping = true; // Silence bogus warning.
|
||||
bool InCond = CurPPLexer->popConditionalLevel(CondInfo);
|
||||
|
@ -326,9 +325,12 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
|
|||
|
||||
// If we popped the outermost skipping block, we're done skipping!
|
||||
if (!CondInfo.WasSkipping) {
|
||||
CheckEndOfDirective("endif");
|
||||
if (Callbacks)
|
||||
Callbacks->Endif(Tok.getLocation(), CondInfo.IfLoc);
|
||||
break;
|
||||
} else {
|
||||
DiscardUntilEndOfDirective();
|
||||
}
|
||||
} else if (Sub == "lse") { // "else".
|
||||
// #else directive in a skipping conditional. If not in some other
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
// RUN: %clang_cc1 -Eonly -verify %s
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
#endif junk // shouldn't produce diagnostics
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#endif junk // expected-warning{{extra tokens at end of #endif directive}}
|
||||
|
||||
#if 1 junk // expected-error{{token is not a valid binary operator in a preprocessor subexpression}}
|
||||
#X // shouldn't produce diagnostics (block #if condition not valid, so skipped)
|
||||
#else
|
||||
#X // expected-error{{invalid preprocessing directive}}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// diagnostics should not be produced until final #endif
|
||||
#X
|
||||
#include
|
||||
#if 1 junk
|
||||
#else junk
|
||||
#endif junk
|
||||
#line -2
|
||||
#error
|
||||
#warning
|
||||
#endif junk // expected-warning{{extra tokens at end of #endif directive}}
|
Loading…
Reference in New Issue