On Mon, 2 Jun 2014, Marek Polacek wrote:
> * c-typeck.c (parser_build_binary_op): Warn when logical not is used
> on the left hand side operand of a comparison.
This...
> +/* Warn about logical not used on the left hand side operand of a comparison.
...and this...
> + warning_at (location, OPT_Wlogical_not_parentheses,
> + "logical not is only applied to the left hand side of "
> + "comparison");
...does not appear consistent with the actual warning.
Why does that warning say "is _ONLY_ applied to the left hand side"?
Based on the message, I naively assumed that the code should not warn
about
int same(int a, int b) {
return !a == !b;
}
alas this is not the case. (Code like this occurs in Wine where
bool types are emulated and !!a or a comparison like above ensure
that those emulated bools are normalized to either 0 or 1.)
I understand there is ambiguity in cases like
return !a == b;
where the warning would be approriately worded and the programmer
might have intended !(a == b).
I do recommend to either omit "only" from the text of the warning
or not warn for cases where ! occurs on both sides of the comparison
(and keep the text as is).
Gerald