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

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-04-15
                 CC|                            |msebor at gcc dot gnu.org
     Ever confirmed|0                           |1
      Known to fail|                            |4.9.3, 5.3.0, 6.0

--- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed.  The warning is also inconsistent between C and C++ modes, likely
because G++ treats the constant b as a constant expression regardless of
optimization while GCC treats it as an ordinary variable with an unknown value
(i.e., it doesn't fold its value without optimization).

This would be solved by making GCC more aggressive about constant folding and
treating more expressions as constant expressions, as requested for example in
bug 69960.  It might be worth to collect the kinds of expressions that could be
considered constant so that they can all be considered at the same time if/when
someone decides to put together a patch for one (or more) of these bugs.

$ cat v.c && gcc -S -Wconversion -xc v.c
unsigned g;
void fn1() {
  int a;
  const unsigned char b = 0;
  a = b & g;
}
v.c: In function ‘fn1’:
v.c:5:7: warning: conversion to ‘int’ from ‘unsigned int’ may change the sign
of the result [-Wsign-conversion]
   a = b & g;
       ^

Reply via email to