forked from OSchip/llvm-project
[clang-tidy] Disable match on `if constexpr` statements in template instantiation for `readability-misleading-indentation` check.
Summary: Fixes fixes `readability-misleading-identation` for `if constexpr`. This is very similar to D71980. Reviewers: alexfh Subscribers: xazax.hun, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D72333
This commit is contained in:
parent
8e2b44f7e0
commit
ba129c7d0f
|
@ -106,7 +106,11 @@ void MisleadingIndentationCheck::missingBracesCheck(const SourceManager &SM,
|
|||
}
|
||||
|
||||
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"),
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
void foo1();
|
||||
void foo2();
|
||||
void foo3();
|
||||
|
||||
#define BLOCK \
|
||||
if (cond1) \
|
||||
|
@ -118,3 +119,79 @@ void g(bool x) {
|
|||
#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]
|
||||
}
|
||||
|
||||
template<bool b>
|
||||
void mustFailNoInsta() {
|
||||
if constexpr (b) {
|
||||
foo1();
|
||||
}
|
||||
else {
|
||||
foo2();
|
||||
// CHECK-MESSAGES: :[[@LINE-2]]:5: warning: different indentation for 'if' and corresponding 'else' [readability-misleading-indentation]
|
||||
}
|
||||
}
|
||||
|
||||
template<bool b>
|
||||
void mustPassNoInsta() {
|
||||
if constexpr (b) {
|
||||
foo1();
|
||||
}
|
||||
else {
|
||||
foo2();
|
||||
}
|
||||
}
|
||||
|
||||
void call() {
|
||||
mustPass<true>();
|
||||
mustPass<false>();
|
||||
mustFail<true>();
|
||||
mustFail<false>();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue