hans added inline comments.

================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:7428-7430
+def warn_bitwise_and_bool : Warning<
+  "bitwise and of boolean expressions; did you mean logical and?">,
+  InGroup<BoolOperationAnd>;
----------------
Quuxplusone wrote:
> xbolva00 wrote:
> > Quuxplusone wrote:
> > > I suggest that the name and wording of this diagnostic should match 
> > > `warn_logical_instead_of_bitwise`, currently `"use of logical '%0' with 
> > > constant operand"`. So:
> > > ```
> > > def warn_bitwise_instead_of_logical : Warning<
> > >   "use of bitwise '%0' with boolean operand">,
> > > ```
> > > This neatly sidesteps the problem of what to call the `&` operator: I was 
> > > not thrilled with the phrase `bitwise and of`, but have no problem with 
> > > `use of bitwise '&'`.
> > I see the point but then I will not be able to provide -Wbool-operation-and 
> > flag to enable/disable this warning.
> > 
> > For example I know that Google prefers a new flag for every new warning so 
> > they dont have to disable eg. -Wbool-operation, but just this new warning 
> > while there are working on fixes for new warnings.
> > 
> > @hans what do you think?
> > 
> > 
> I don't understand your comment. My guess is that you didn't notice that 
> `-Wbitwise-instead-of-logical` would still be a different flag from 
> `-Wlogical-instead-of-bitwise`. I'm not suggesting putting them under the 
> //same// flag; just making the newly added flag a little more consistent and 
> (heh) logical, based on what's already there.
> @hans what do you think?

I think we're all in agreement here. Putting this behind a separate 
-Wbitwise-instead-of-logical flag sounds good to me.


================
Comment at: clang/test/Sema/warn-bitwise-and-bool.c:21-22
+void test(boolean a, boolean b, int i) {
+  b = a & b;
+  b = a & foo();      // expected-warning {{bitwise and of boolean 
expressions; did you mean logical and?}}
+                      // CHECK: 
fix-it:"{{.*}}":{[[@LINE-1]]:9-[[@LINE-1]]:10}:"&&"
----------------
xbolva00 wrote:
> Quuxplusone wrote:
> > So the warning triggers only when the RHS has side-effects? I'd like tests 
> > for
> > ```
> > foo() & a;  // should not trigger, by that logic, because && wouldn't 
> > short-circuit anything?
> > (p != nullptr) & (*p == 42);  // should certainly trigger: deref is a side 
> > effect, and of course obviously this is a bug
> > ```
> Yes, but oh.
> 
> This is weird, HasSideEffects is false for this case. Works fine for volatile 
> int.
> 
> @rsmith?
I don't think a non-volatile pointer deref actually has any side effect. I 
think what we'd want to check here is if the expression could be reordered with 
the LHS. But I don't know how we'd check that.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108003/new/

https://reviews.llvm.org/D108003

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to