PiotrZSL updated this revision to Diff 509136. PiotrZSL added a comment. Move tests to new file.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D146887/new/ https://reviews.llvm.org/D146887 Files: clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp clang-tools-extra/docs/ReleaseNotes.rst clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation-cpp17.cpp Index: clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation-cpp17.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation-cpp17.cpp @@ -0,0 +1,29 @@ +// RUN: %check_clang_tidy -std=c++17-or-later %s readability-misleading-indentation %t -- -- -fno-delayed-template-parsing + +namespace PR61435 { + +template<int N> +constexpr auto lam_correct = []{ + if constexpr (N == 1) { + } else { + } +}; + +template<int N> +constexpr auto lam_incorrect = []{ + if constexpr (N == 1) { + } + else { + } + // CHECK-MESSAGES: :[[@LINE-2]]:4: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation] +}; + +void test() { + lam_correct<1>(); + lam_correct<2>(); + + lam_incorrect<1>(); + lam_incorrect<2>(); +} + +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -240,6 +240,10 @@ magic numbers in type aliases such as ``using`` and ``typedef`` declarations if the new ``IgnoreTypeAliases`` option is set to true. +- Fixed a false positive in :doc:`readability-misleading-indentation + <clang-tidy/checks/readability/misleading-indentation>` check when warning would + be unnecessarily emitted for template dependent ``if constexpr``. + - Fixed a false positive in :doc:`cppcoreguidelines-slicing <clang-tidy/checks/cppcoreguidelines/slicing>` check when warning would be emitted in constructor for virtual base class initialization. Index: clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp +++ clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp @@ -104,7 +104,8 @@ } void MisleadingIndentationCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(ifStmt(hasElse(stmt())).bind("if"), this); + Finder->addMatcher( + ifStmt(unless(hasThen(nullStmt())), hasElse(stmt())).bind("if"), this); Finder->addMatcher( compoundStmt(has(stmt(anyOf(ifStmt(), forStmt(), whileStmt())))) .bind("compound"),
Index: clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation-cpp17.cpp =================================================================== --- /dev/null +++ clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation-cpp17.cpp @@ -0,0 +1,29 @@ +// RUN: %check_clang_tidy -std=c++17-or-later %s readability-misleading-indentation %t -- -- -fno-delayed-template-parsing + +namespace PR61435 { + +template<int N> +constexpr auto lam_correct = []{ + if constexpr (N == 1) { + } else { + } +}; + +template<int N> +constexpr auto lam_incorrect = []{ + if constexpr (N == 1) { + } + else { + } + // CHECK-MESSAGES: :[[@LINE-2]]:4: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation] +}; + +void test() { + lam_correct<1>(); + lam_correct<2>(); + + lam_incorrect<1>(); + lam_incorrect<2>(); +} + +} Index: clang-tools-extra/docs/ReleaseNotes.rst =================================================================== --- clang-tools-extra/docs/ReleaseNotes.rst +++ clang-tools-extra/docs/ReleaseNotes.rst @@ -240,6 +240,10 @@ magic numbers in type aliases such as ``using`` and ``typedef`` declarations if the new ``IgnoreTypeAliases`` option is set to true. +- Fixed a false positive in :doc:`readability-misleading-indentation + <clang-tidy/checks/readability/misleading-indentation>` check when warning would + be unnecessarily emitted for template dependent ``if constexpr``. + - Fixed a false positive in :doc:`cppcoreguidelines-slicing <clang-tidy/checks/cppcoreguidelines/slicing>` check when warning would be emitted in constructor for virtual base class initialization. Index: clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp =================================================================== --- clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp +++ clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp @@ -104,7 +104,8 @@ } void MisleadingIndentationCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(ifStmt(hasElse(stmt())).bind("if"), this); + Finder->addMatcher( + ifStmt(unless(hasThen(nullStmt())), hasElse(stmt())).bind("if"), this); Finder->addMatcher( compoundStmt(has(stmt(anyOf(ifStmt(), forStmt(), whileStmt())))) .bind("compound"),
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits