https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81402

            Bug ID: 81402
           Summary: unhelpful -Wparentheses suggestion for assignment from
                    non-zero constant
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: trivial
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

In response to a controlling expression in an if statement that is an
assignment expression, -Wparentheses suggests to enclose the expression in
parentheses.  That suggestion is only helpful in cases where the value of right
operand of the assignment is unknown.  Otherwise, when its value is constant,
and especially when the operand is a literal, the assignment is almost
certainly wrong because testing the value of a constant for equality to zero is
pointless.  In those cases, pointing out the likely mistake rather than
suggesting to use parentheses  would be more helpful.

$ cat a.c && gcc -S -Wall a.c
oid f (int i, int j)
{
  if (i = j) { }  // assignment could be intended
}

void g (int i)
{
  if (i = 1) { }   // assignment almost certainly not intended
}

a.c: In function ā€˜fā€™:
a.c:3:7: warning: suggest parentheses around assignment used as truth value
[-Wparentheses]
   if (i = j) { }  // assignment could be intended
       ^
a.c: In function ā€˜gā€™:
a.c:8:7: warning: suggest parentheses around assignment used as truth value
[-Wparentheses]
   if (i = 1) { }   // assignment almost certainly not intended
       ^

Reply via email to