forked from OSchip/llvm-project
[clang-tidy] Don't treat invalid branches as identical
The clang-tidy check bugprone-branch-clone has a false positive if some symbols are undefined. This patch silences the warning when the two sides of a branch are invalid. Fixes #56057 Differential Revision: https://reviews.llvm.org/D128402
This commit is contained in:
parent
134363208b
commit
a65a3bffd3
|
@ -19,6 +19,17 @@ using namespace clang::ast_matchers;
|
|||
/// Returns true when the statements are Type I clones of each other.
|
||||
static bool areStatementsIdentical(const Stmt *LHS, const Stmt *RHS,
|
||||
const ASTContext &Context) {
|
||||
if (isa<Expr>(LHS) && isa<Expr>(RHS)) {
|
||||
// If we have errors in expressions, we will be unable
|
||||
// to accurately profile and compute hashes for each
|
||||
// of the left and right statements.
|
||||
const auto *LHSExpr = llvm::cast<Expr>(LHS);
|
||||
const auto *RHSExpr = llvm::cast<Expr>(RHS);
|
||||
if (LHSExpr->containsErrors() && RHSExpr->containsErrors()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
llvm::FoldingSetNodeID DataLHS, DataRHS;
|
||||
LHS->Profile(DataLHS, Context, false);
|
||||
RHS->Profile(DataRHS, Context, false);
|
||||
|
|
|
@ -158,6 +158,10 @@ Changes in existing checks
|
|||
- Fixed nonsensical suggestion of :doc:`altera-struct-pack-align
|
||||
<clang-tidy/checks/altera/struct-pack-align>` check for empty structs.
|
||||
|
||||
- Fixed a false positive in :doc:`bugprone-branch-clone
|
||||
<clang-tidy/checks/bugprone/branch-clone>` when the branches
|
||||
involve unknown expressions.
|
||||
|
||||
- Fixed some false positives in :doc:`bugprone-infinite-loop
|
||||
<clang-tidy/checks/bugprone/infinite-loop>` involving dependent expressions.
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// RUN: %check_clang_tidy -expect-clang-tidy-error %s bugprone-branch-clone %t
|
||||
|
||||
int test_unknown_expression() {
|
||||
if (unknown_expression_1) { // CHECK-MESSAGES: :[[@LINE]]:7: error: use of undeclared identifier 'unknown_expression_1' [clang-diagnostic-error]
|
||||
function1(unknown_expression_2); // CHECK-MESSAGES: :[[@LINE]]:15: error: use of undeclared identifier 'unknown_expression_2' [clang-diagnostic-error]
|
||||
} else {
|
||||
function2(unknown_expression_3); // CHECK-MESSAGES: :[[@LINE]]:15: error: use of undeclared identifier 'unknown_expression_3' [clang-diagnostic-error]
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue