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

Mikhail Maltsev <maltsevm at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |maltsevm at gmail dot com

--- Comment #1 from Mikhail Maltsev <maltsevm at gmail dot com> ---
Indeed, confirmed on recent revision, r219801.
FWIW: it affects only bitwise operations with constants and only in case when
result is wider than non-constant operand. They are handled specially in
unsafe_conversion_p (I guess, that's because bitwise AND is used frequently, so
false positives involving it should be avoided).

$ cat ./test.c
int a;
unsigned long b;

void foo()
{
  a ^ b;
  a ^ 0x1U;
  a ^ 0x1UL;
  a + 0x1U;
  a + 0x1UL;
  a & 0xFFFFFFFFULL;
  a & 0x7FFFFFFFULL;
}

$ ../obj/gcc/xgcc -B../obj/gcc -c ./test.c -Wconversion
./test.c: In function 'foo':
./test.c:6:5: warning: conversion to 'long unsigned int' from 'int' may change
the sign of the result [-Wsign-conversion]
   a ^ b;
     ^
./test.c:7:5: warning: conversion to 'unsigned int' from 'int' may change the
sign of the result [-Wsign-conversion]
   a ^ 0x1U;
     ^
./test.c:9:5: warning: conversion to 'unsigned int' from 'int' may change the
sign of the result [-Wsign-conversion]
   a + 0x1U;
     ^
./test.c:10:5: warning: conversion to 'long unsigned int' from 'int' may change
the sign of the result [-Wsign-conversion]
   a + 0x1UL;
     ^
./test.c:11:5: warning: conversion to 'long long unsigned int' from 'int' may
change the sign of the result [-Wsign-conversion]
   a & 0xFFFFFFFFULL;
     ^

Reply via email to