diff options
Diffstat (limited to 'clang/lib/Parse/ParseStmt.cpp')
-rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index dc951dc22f5..203f30610ce 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -1201,13 +1201,12 @@ struct MisleadingIndentationChecker { SourceLocation PrevLoc; unsigned NumDirectives; MisleadingStatementKind Kind; - bool NeedsChecking; bool ShouldSkip; MisleadingIndentationChecker(Parser &P, MisleadingStatementKind K, SourceLocation SL) : P(P), StmtLoc(SL), PrevLoc(P.getCurToken().getLocation()), NumDirectives(P.getPreprocessor().getNumDirectives()), Kind(K), - NeedsChecking(true), ShouldSkip(P.getCurToken().is(tok::l_brace)) { + ShouldSkip(P.getCurToken().is(tok::l_brace)) { if (!P.MisleadingIndentationElseLoc.isInvalid()) { StmtLoc = P.MisleadingIndentationElseLoc; P.MisleadingIndentationElseLoc = SourceLocation(); @@ -1216,9 +1215,10 @@ struct MisleadingIndentationChecker { P.MisleadingIndentationElseLoc = SL; } void Check() { - NeedsChecking = false; Token Tok = P.getCurToken(); - if (ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || + if (P.getActions().getDiagnostics().isIgnored( + diag::warn_misleading_indentation, Tok.getLocation()) || + ShouldSkip || NumDirectives != P.getPreprocessor().getNumDirectives() || Tok.isOneOf(tok::semi, tok::r_brace) || Tok.isAnnotation() || Tok.getLocation().isMacroID() || PrevLoc.isMacroID() || StmtLoc.isMacroID() || @@ -1226,6 +1226,8 @@ struct MisleadingIndentationChecker { P.MisleadingIndentationElseLoc = SourceLocation(); return; } + if (Kind == MSK_else) + P.MisleadingIndentationElseLoc = SourceLocation(); SourceManager &SM = P.getPreprocessor().getSourceManager(); unsigned PrevColNum = SM.getSpellingColumnNumber(PrevLoc); |