http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59939

            Bug ID: 59939
           Summary: No warning on signedness changes caused by implicit
                    conversion
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: chengniansun at gmail dot com

There is no warning on signedness changes by implicit conversion, which occur
in dead code due to short-circuit of "or". See the following. If I change "1 ||
fn1(a, b)" to "0 || fn1(a, b)", then Gcc warns.


--------------------------------------------------
$: cat s.c.v6.c
int a, b;
int fn1(unsigned, unsigned);

unsigned int fn2() {
  return 1 || fn1(a, b);
}
$: gcc-trunk -c -Wconversion s.c.v6.c
$: clang-trunk -c -Wconversion s.c.v6.c
s.c.v6.c:5:19: warning: implicit conversion changes signedness: 'int' to
'unsigned int' [-Wsign-conversion]
  return 1 || fn1(a, b);
              ~~~ ^
s.c.v6.c:5:22: warning: implicit conversion changes signedness: 'int' to
'unsigned int' [-Wsign-conversion]
  return 1 || fn1(a, b);
              ~~~    ^
2 warnings generated.
-----------------------------------------------------

Is it a better way to report that the "fn1(a,b)" is not reachable and there are
signedness changes in this function call, just like the way Clang does, or at
least one of them?

Reply via email to