Abpostelnicu updated this revision to Diff 236596.
Abpostelnicu added a comment.

Updated test with match without compound statement.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D72333/new/

https://reviews.llvm.org/D72333

Files:
  clang-tools-extra/clang-tidy/readability/MisleadingIndentationCheck.cpp
  
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
@@ -2,6 +2,7 @@
 
 void foo1();
 void foo2();
+void foo3();
 
 #define BLOCK \
   if (cond1)  \
@@ -118,3 +119,58 @@
   #pragma unroll
   for (int k = 0; k < 1; ++k) {}
 }
+
+template<bool b>
+void mustPass() {
+  if constexpr (b) {
+    foo1();
+  } else {
+    foo2();
+  }
+}
+
+void mustPassNonTemplate() {
+  constexpr unsigned Value = 1;
+  if constexpr (Value == 0) {
+    foo1();
+  } else if constexpr (Value == 1) {
+    foo2();
+  } else {
+    foo3();
+  }
+}
+
+template<bool b>
+void mustFail() {
+  if constexpr (b) {
+    foo1();
+  }
+    else {
+      foo2();
+      // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 
'if' and corresponding 'else' [readability-misleading-indentation]
+  }
+}
+
+void mustFailNonTemplate() {
+  constexpr unsigned Value = 1;
+  if constexpr (Value == 0) {
+    foo1();
+  }
+    else {
+  foo2();
+  // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' 
and corresponding 'else' [readability-misleading-indentation]
+  }
+
+  if constexpr (Value == 0)
+    foo1();
+    else
+  foo2();
+  // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' 
and corresponding 'else' [readability-misleading-indentation]
+}
+
+void call() {
+  mustPass<true>();
+  mustPass<false>();
+  mustFail<true>();
+  mustFail<false>();
+}
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
@@ -106,7 +106,11 @@
 }
 
 void MisleadingIndentationCheck::registerMatchers(MatchFinder *Finder) {
-  Finder->addMatcher(ifStmt(hasElse(stmt())).bind("if"), this);
+  Finder->addMatcher(
+      ifStmt(allOf(hasElse(stmt()),
+                   unless(allOf(isConstexpr(), isInTemplateInstantiation()))))
+          .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.cpp
===================================================================
--- clang-tools-extra/test/clang-tidy/checkers/readability-misleading-indentation.cpp
+++ clang-tools-extra/test/clang-tidy/checkers/readability-misleading-indentation.cpp
@@ -2,6 +2,7 @@
 
 void foo1();
 void foo2();
+void foo3();
 
 #define BLOCK \
   if (cond1)  \
@@ -118,3 +119,58 @@
   #pragma unroll
   for (int k = 0; k < 1; ++k) {}
 }
+
+template<bool b>
+void mustPass() {
+  if constexpr (b) {
+    foo1();
+  } else {
+    foo2();
+  }
+}
+
+void mustPassNonTemplate() {
+  constexpr unsigned Value = 1;
+  if constexpr (Value == 0) {
+    foo1();
+  } else if constexpr (Value == 1) {
+    foo2();
+  } else {
+    foo3();
+  }
+}
+
+template<bool b>
+void mustFail() {
+  if constexpr (b) {
+    foo1();
+  }
+    else {
+      foo2();
+      // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation]
+  }
+}
+
+void mustFailNonTemplate() {
+  constexpr unsigned Value = 1;
+  if constexpr (Value == 0) {
+    foo1();
+  }
+    else {
+  foo2();
+  // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation]
+  }
+
+  if constexpr (Value == 0)
+    foo1();
+    else
+  foo2();
+  // CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation]
+}
+
+void call() {
+  mustPass<true>();
+  mustPass<false>();
+  mustFail<true>();
+  mustFail<false>();
+}
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
@@ -106,7 +106,11 @@
 }
 
 void MisleadingIndentationCheck::registerMatchers(MatchFinder *Finder) {
-  Finder->addMatcher(ifStmt(hasElse(stmt())).bind("if"), this);
+  Finder->addMatcher(
+      ifStmt(allOf(hasElse(stmt()),
+                   unless(allOf(isConstexpr(), isInTemplateInstantiation()))))
+          .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

Reply via email to