From e31fe508e890900bc8d01637c35a8b4243c4ab8f Mon Sep 17 00:00:00 2001 From: Alexander Kornienko Date: Wed, 17 Apr 2019 16:19:47 +0000 Subject: [PATCH] [clang-tidy] Fix invalid location in readability-misleading-indentation diagnostic Before this patch readability-misleading-indentation could issue diagnostics with an invalid location, which would lead to an assertion failure in ClangTidyContext::diag() llvm-svn: 358589 --- .../readability/MisleadingIndentationCheck.cpp | 6 +++++- .../readability-misleading-indentation.cpp | 13 +++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp b/clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp index 767406e3ac0c..0fd5c1fc55c6 100644 --- a/clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp @@ -81,6 +81,10 @@ void MisleadingIndentationCheck::missingBracesCheck(const SourceManager &SM, SourceLocation InnerLoc = Inner->getBeginLoc(); SourceLocation OuterLoc = CurrentStmt->getBeginLoc(); + if (InnerLoc.isInvalid() || InnerLoc.isMacroID() || OuterLoc.isInvalid() || + OuterLoc.isMacroID()) + continue; + if (SM.getExpansionLineNumber(InnerLoc) == SM.getExpansionLineNumber(OuterLoc)) continue; @@ -88,7 +92,7 @@ void MisleadingIndentationCheck::missingBracesCheck(const SourceManager &SM, const Stmt *NextStmt = CStmt->body_begin()[i + 1]; SourceLocation NextLoc = NextStmt->getBeginLoc(); - if (InnerLoc.isMacroID() || OuterLoc.isMacroID() || NextLoc.isMacroID()) + if (NextLoc.isInvalid() || NextLoc.isMacroID()) continue; if (SM.getExpansionColumnNumber(InnerLoc) == diff --git a/clang-tools-extra/test/clang-tidy/readability-misleading-indentation.cpp b/clang-tools-extra/test/clang-tidy/readability-misleading-indentation.cpp index 59d5f4069188..403994923549 100644 --- a/clang-tools-extra/test/clang-tidy/readability-misleading-indentation.cpp +++ b/clang-tools-extra/test/clang-tidy/readability-misleading-indentation.cpp @@ -8,7 +8,7 @@ void foo2(); foo1(); \ foo2(); -int main() +void f() { bool cond1 = true; bool cond2 = true; @@ -90,7 +90,7 @@ int main() else { } // CHECK-MESSAGES: :[[@LINE-2]]:8: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation] - + if (cond1) { if (cond1) { } @@ -109,3 +109,12 @@ int main() BLOCK } + +void g(bool x) { + if (x) + #pragma unroll + for (int k = 0; k < 1; ++k) {} + + #pragma unroll + for (int k = 0; k < 1; ++k) {} +}