Re: [gcc] no warning on int conversion overflow in non-c99 mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2014-02-18 12:09:52 +0800, Chung-Ju Wu wrote:
> But to my understanding, the warning comes from that you didn't explicitly
> tell the constant type, nor cast it into an representable value for lvalue.
> So gcc warns you:
>   "Hey, there is an implicit constant type, and I am going to convert it
>    into a signed int.  Be careful that there is an overflow!!"

But it currently behaves in an inconsistent way: without -pedantic,
it signals some overflows, but not all of them.

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

> If you use either
>     signed int ia = 2166136261u;
>     signed int ia1 = 2147483648u;
> or
>     signed int ia = (signed int) 2166136261;
>     signed int ia1 = (signed int) 2147483648;
> 
> There is no warning message because it makes gcc understand
> that you know what exactly you are doing.

I don't think this is necessarily the case. You could have code like:

#define VAL 2166136261u;

  unsigned int i = VAL * VAL;

  /* ... */

  int ia = VAL;

where some value is used at various places in the code, and the
user doesn't remember that VAL doesn't fit in an int or forgot the
"unsigned". The unsigned type could have been given because it is
needed in some places like in VAL * VAL above (to have modular
arithmetic).

-- 
Vincent Lefèvre <vincent@xxxxxxxxxx> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux