https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69686
Bug ID: 69686
Summary: Useless -Wparentheses for A && B || !A && C
Product: gcc
Version: 5.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wipedout at yandex dot ru
Target Milestone: ---
I'm compiling this with gcc 5.3.0 with -O3 -Wall -std=c++11
void test()
{
int a, b, c;
if(a && b || !a && c);
}
Please ignore the uninitialized variables. I get this warning:
warning: suggest parentheses around '&&' within '||' [-Wparentheses]
Okay, there're four ways to put them here:
Option one is repeating the default behavior
if((a && b) || (!a && c));
Option two is
if(a && (b || !a) && c);
Note "a && (b || !a)" part which is equivalent to "a && b || a && !a" which
contains "a && !a" which is always "false" and so makes no sense.
Option three is
if((a && b || !a) && c);
which now contains "a && b || !a" which makes no sense.
Option four is
if(a && (b || !a && c)); which contains the same nonsense as option two.
So here there's only once reasonable way to put parentheses and the warning is
useless.