mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-03 19:32:35 +00:00
[clang-tidy] Fix if-constexpr false-positive in readability-misleading-indentation
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 Reviewed By: carlosgalvezp Differential Revision: https://reviews.llvm.org/D146887
This commit is contained in:
parent
270067d695
commit
498c88563b
@ -104,7 +104,8 @@ void MisleadingIndentationCheck::missingBracesCheck(const SourceManager &SM,
|
||||
}
|
||||
|
||||
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"),
|
||||
|
@ -240,6 +240,10 @@ Changes in existing checks
|
||||
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.
|
||||
|
@ -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>();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user