diff options
author | Tyker <tyker1@outlook.com> | 2020-01-06 22:04:55 +0100 |
---|---|---|
committer | Tyker <tyker1@outlook.com> | 2020-01-06 23:22:27 +0100 |
commit | f5329bfc76bb6fc30a589e8238aabc005c52e5d6 (patch) | |
tree | e049e832e686c707a3965843ba548d0a5c4a746d | |
parent | ee6b8722ffa101b57af9029c84691cb7e8a43799 (diff) | |
download | bcm5719-llvm-f5329bfc76bb6fc30a589e8238aabc005c52e5d6.tar.gz bcm5719-llvm-f5329bfc76bb6fc30a589e8238aabc005c52e5d6.zip |
[Diagnostic] make Wmisleading-indendation not warn about labels
Reviewers: aaron.ballman, xbolva00
Reviewed By: aaron.ballman
Subscribers: nickdesaulniers, nathanchance
Differential Revision: https://reviews.llvm.org/D72202
-rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 10 | ||||
-rw-r--r-- | clang/test/Parser/warn-misleading-indentation.cpp | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index b7965401565..0339328ca51 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/lib/Parse/ParseStmt.cpp @@ -1272,10 +1272,12 @@ struct MisleadingIndentationChecker { if (PrevColNum != 0 && CurColNum != 0 && StmtColNum != 0 && ((PrevColNum > StmtColNum && PrevColNum == CurColNum) || - !Tok.isAtStartOfLine()) && SM.getPresumedLineNumber(StmtLoc) != - SM.getPresumedLineNumber(Tok.getLocation())) { - P.Diag(Tok.getLocation(), diag::warn_misleading_indentation) - << Kind; + !Tok.isAtStartOfLine()) && + SM.getPresumedLineNumber(StmtLoc) != + SM.getPresumedLineNumber(Tok.getLocation()) && + (Tok.isNot(tok::identifier) || + P.getPreprocessor().LookAhead(0).isNot(tok::colon))) { + P.Diag(Tok.getLocation(), diag::warn_misleading_indentation) << Kind; P.Diag(StmtLoc, diag::note_previous_statement); } } diff --git a/clang/test/Parser/warn-misleading-indentation.cpp b/clang/test/Parser/warn-misleading-indentation.cpp index 4b9d45b19ca..8339f21099c 100644 --- a/clang/test/Parser/warn-misleading-indentation.cpp +++ b/clang/test/Parser/warn-misleading-indentation.cpp @@ -305,3 +305,10 @@ int main(int argc, char* argv[]) { fail:; } +void f_label(int b) { + if (b) + return; + a: + return; + goto a; +} |