[PATCH] D146887: [clang-tidy] Fix if-constexpr false-positive in readability-misleading-indentation
Piotr Zegar via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Mar 25 14:55:58 PDT 2023
PiotrZSL created this revision.
Herald added subscribers: carlosgalvezp, xazax.hun.
Herald added a reviewer: njames93.
Herald added a project: All.
PiotrZSL requested review of this revision.
Herald added a project: clang-tools-extra.
Herald added a subscriber: cfe-commits.
When depend on template parameter,
compiler can use NullStmt instead of CompoundStmt.
This causes issues as we losing information about
end location of that Stmt. To avoid this issue
check now ignores ifStmt with NullStmt on true-branch.
Fixes: https://github.com/llvm/llvm-project/issues/61435
Repository:
rG LLVM Github Monorepo
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.cpp
Index: clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability/misleading-indentation.cpp
@@ -1,4 +1,4 @@
-// RUN: %check_clang_tidy %s readability-misleading-indentation %t -- -- -fno-delayed-template-parsing
+// RUN: %check_clang_tidy -std=c++17-or-later %s readability-misleading-indentation %t -- -- -fno-delayed-template-parsing
void foo1();
void foo2();
@@ -195,3 +195,31 @@
mustFail<true>();
mustFail<false>();
}
+
+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
@@ -225,6 +225,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"),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D146887.508346.patch
Type: text/x-patch
Size: 2640 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230325/6501917c/attachment.bin>
More information about the cfe-commits
mailing list