diff options
author | Dávid Bolvanský <david.bolvansky@gmail.com> | 2021-10-03 13:05:09 +0200 |
---|---|---|
committer | Dávid Bolvanský <david.bolvansky@gmail.com> | 2021-10-03 13:05:09 +0200 |
commit | f59cc9542bfb461d16ad12b2cc4be4abbfd9d96e (patch) | |
tree | 2ca37320ceaba134209e085d87c1685d5ea34632 /clang/lib/Sema/SemaChecking.cpp | |
parent | b1fcca38844138d1950e1b34eb2be65b3bfc7352 (diff) | |
download | llvm-f59cc9542bfb461d16ad12b2cc4be4abbfd9d96e.zip llvm-f59cc9542bfb461d16ad12b2cc4be4abbfd9d96e.tar.gz llvm-f59cc9542bfb461d16ad12b2cc4be4abbfd9d96e.tar.bz2 |
Reland "[Clang] Extend -Wbool-operation to warn about bitwise and of bools with side effects"
This reverts commit a4933f57f3f0a45e1db1075f7285f0761a80fc06. New warnings were fixed.
Diffstat (limited to 'clang/lib/Sema/SemaChecking.cpp')
-rw-r--r-- | clang/lib/Sema/SemaChecking.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp index 615ba1a..bdd9fb4 100644 --- a/clang/lib/Sema/SemaChecking.cpp +++ b/clang/lib/Sema/SemaChecking.cpp @@ -13249,6 +13249,20 @@ static void AnalyzeImplicitConversions( << OrigE->getSourceRange() << T->isBooleanType() << FixItHint::CreateReplacement(UO->getBeginLoc(), "!"); + if (const auto *BO = dyn_cast<BinaryOperator>(SourceExpr)) + if ((BO->getOpcode() == BO_And || BO->getOpcode() == BO_Or) && + BO->getLHS()->isKnownToHaveBooleanValue() && + BO->getRHS()->isKnownToHaveBooleanValue() && + BO->getLHS()->HasSideEffects(S.Context) && + BO->getRHS()->HasSideEffects(S.Context)) { + S.Diag(BO->getBeginLoc(), diag::warn_bitwise_instead_of_logical) + << (BO->getOpcode() == BO_And ? "&" : "|") << OrigE->getSourceRange() + << FixItHint::CreateReplacement( + BO->getOperatorLoc(), + (BO->getOpcode() == BO_And ? "&&" : "||")); + S.Diag(BO->getBeginLoc(), diag::note_cast_operand_to_int); + } + // For conditional operators, we analyze the arguments as if they // were being fed directly into the output. if (auto *CO = dyn_cast<AbstractConditionalOperator>(SourceExpr)) { |