r373973 - [Diagnostics] Emit better -Wbool-operation's warning message if we known that the result is always true
David Bolvansky via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 7 14:57:04 PDT 2019
Author: xbolva00
Date: Mon Oct 7 14:57:03 2019
New Revision: 373973
URL: http://llvm.org/viewvc/llvm-project?rev=373973&view=rev
Log:
[Diagnostics] Emit better -Wbool-operation's warning message if we known that the result is always true
Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaChecking.cpp
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/warn-bitwise-negation-bool.c
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=373973&r1=373972&r2=373973&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Oct 7 14:57:03 2019
@@ -6638,7 +6638,8 @@ def note_member_declared_here : Note<
def note_member_first_declared_here : Note<
"member %0 first declared here">;
def warn_bitwise_negation_bool : Warning<
- "bitwise negation of a boolean expression; did you mean logical negation?">,
+ "bitwise negation of a boolean expression%select{;| always evaluates to 'true';}0 "
+ "did you mean logical negation?">,
InGroup<DiagGroup<"bool-operation">>;
def err_decrement_bool : Error<"cannot decrement expression of type bool">;
def warn_increment_bool : Warning<
Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=373973&r1=373972&r2=373973&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
+++ cfe/trunk/lib/Sema/SemaChecking.cpp Mon Oct 7 14:57:03 2019
@@ -11896,6 +11896,13 @@ static void AnalyzeImplicitConversions(S
if (E->isTypeDependent() || E->isValueDependent())
return;
+ if (const auto *UO = dyn_cast<UnaryOperator>(E))
+ if (UO->getOpcode() == UO_Not &&
+ UO->getSubExpr()->isKnownToHaveBooleanValue())
+ S.Diag(UO->getBeginLoc(), diag::warn_bitwise_negation_bool)
+ << OrigE->getSourceRange() << T->isBooleanType()
+ << FixItHint::CreateReplacement(UO->getBeginLoc(), "!");
+
// For conditional operators, we analyze the arguments as if they
// were being fed directly into the output.
if (isa<ConditionalOperator>(E)) {
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=373973&r1=373972&r2=373973&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Mon Oct 7 14:57:03 2019
@@ -13479,10 +13479,6 @@ ExprResult Sema::CreateBuiltinUnaryOp(So
// C99 does not support '~' for complex conjugation.
Diag(OpLoc, diag::ext_integer_complement_complex)
<< resultType << Input.get()->getSourceRange();
- else if (Input.get()->isKnownToHaveBooleanValue())
- Diag(OpLoc, diag::warn_bitwise_negation_bool)
- << Input.get()->getSourceRange()
- << FixItHint::CreateReplacement(OpLoc, "!");
else if (resultType->hasIntegerRepresentation())
break;
else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {
Modified: cfe/trunk/test/Sema/warn-bitwise-negation-bool.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-bitwise-negation-bool.c?rev=373973&r1=373972&r2=373973&view=diff
==============================================================================
--- cfe/trunk/test/Sema/warn-bitwise-negation-bool.c (original)
+++ cfe/trunk/test/Sema/warn-bitwise-negation-bool.c Mon Oct 7 14:57:03 2019
@@ -12,13 +12,13 @@ typedef _Bool boolean;
#endif
void test(boolean b, int i) {
- b = ~b; // expected-warning {{bitwise negation of a boolean expression; did you mean logical negation?}}
+ b = ~b; // expected-warning {{bitwise negation of a boolean expression always evaluates to 'true'; did you mean logical negation?}}
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"
- b = ~(b); // expected-warning {{bitwise negation of a boolean expression; did you mean logical negation?}}
+ b = ~(b); // expected-warning {{bitwise negation of a boolean expression always evaluates to 'true'; did you mean logical negation?}}
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"
b = ~i;
i = ~b; // expected-warning {{bitwise negation of a boolean expression; did you mean logical negation?}}
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"
- b = ~(i > 4); // expected-warning {{bitwise negation of a boolean expression; did you mean logical negation?}}
+ b = ~(i > 4); // expected-warning {{bitwise negation of a boolean expression always evaluates to 'true'; did you mean logical negation?}}
// CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"
}
More information about the cfe-commits
mailing list