<div dir="ltr">../../clang/lib/Sema/SemaExpr.cpp:13481:25: error: no member named 'warn_bitwise_negation_bool' in namespace 'clang::diag'<br>      Diag(OpLoc, diag::warn_bitwise_negation_bool)<br>                  ~~~~~~^<br>1 error generated.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Oct 3, 2019 at 11:16 AM David Bolvansky via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: xbolva00<br>
Date: Thu Oct  3 08:17:59 2019<br>
New Revision: 373614<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=373614&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=373614&view=rev</a><br>
Log:<br>
[Diagnostics] Bitwise negation of a boolean expr always evaluates to true; warn with -Wbool-operation<br>
<br>
Requested here:<br>
<a href="http://lists.llvm.org/pipermail/cfe-dev/2019-October/063452.html" rel="noreferrer" target="_blank">http://lists.llvm.org/pipermail/cfe-dev/2019-October/063452.html</a><br>
<br>
<br>
Added:<br>
    cfe/trunk/test/Sema/warn-bitwise-negation-bool.c<br>
Modified:<br>
    cfe/trunk/lib/Sema/SemaExpr.cpp<br>
<br>
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=373614&r1=373613&r2=373614&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=373614&r1=373613&r2=373614&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Thu Oct  3 08:17:59 2019<br>
@@ -13470,7 +13470,6 @@ ExprResult Sema::CreateBuiltinUnaryOp(So<br>
     if (Input.isInvalid())<br>
       return ExprError();<br>
     resultType = Input.get()->getType();<br>
-<br>
     if (resultType->isDependentType())<br>
       break;<br>
     // C99 6.5.3.3p1. We allow complex int and float as a GCC extension.<br>
@@ -13478,6 +13477,9 @@ ExprResult Sema::CreateBuiltinUnaryOp(So<br>
       // C99 does not support '~' for complex conjugation.<br>
       Diag(OpLoc, diag::ext_integer_complement_complex)<br>
           << resultType << Input.get()->getSourceRange();<br>
+    else if (Input.get()->IgnoreParenImpCasts()->getType()->isBooleanType())<br>
+      Diag(OpLoc, diag::warn_bitwise_negation_bool)<br>
+          << FixItHint::CreateReplacement(OpLoc, "!");<br>
     else if (resultType->hasIntegerRepresentation())<br>
       break;<br>
     else if (resultType->isExtVectorType() && Context.getLangOpts().OpenCL) {<br>
<br>
Added: cfe/trunk/test/Sema/warn-bitwise-negation-bool.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-bitwise-negation-bool.c?rev=373614&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/warn-bitwise-negation-bool.c?rev=373614&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Sema/warn-bitwise-negation-bool.c (added)<br>
+++ cfe/trunk/test/Sema/warn-bitwise-negation-bool.c Thu Oct  3 08:17:59 2019<br>
@@ -0,0 +1,20 @@<br>
+// RUN: %clang_cc1 -x c -fsyntax-only -verify -Wbool-operation %s<br>
+// RUN: %clang_cc1 -x c -fsyntax-only -verify %s<br>
+// RUN: %clang_cc1 -x c -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s<br>
+// RUN: %clang_cc1 -x c++ -fsyntax-only -verify -Wbool-operation %s<br>
+// RUN: %clang_cc1 -x c++ -fsyntax-only -verify %s<br>
+// RUN: %clang_cc1 -x c++ -fsyntax-only -fdiagnostics-parseable-fixits %s 2>&1 | FileCheck %s<br>
+<br>
+#ifdef __cplusplus<br>
+typedef bool boolean;<br>
+#else<br>
+typedef _Bool boolean;<br>
+#endif<br>
+<br>
+void test(boolean b, int i) {<br>
+  b = ~b; // expected-warning {{bitwise negation of a boolean expression always evaluates to 'true'}}<br>
+  // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"<br>
+  b = ~(b); // expected-warning {{bitwise negation of a boolean expression always evaluates to 'true'}}<br>
+  // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:7-[[@LINE-1]]:8}:"!"<br>
+  b = ~i;<br>
+}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>