|
From: | Bernd Schmidt |
Subject: | Re: changing "configure" to default to "gcc -g -O2 -fwrapv ..." |
Date: | Sun, 31 Dec 2006 02:59:04 +0100 |
User-agent: | Thunderbird 1.5.0.9 (X11/20061229) |
Eric Blake wrote:
/* The maximum and minimum values for the integer type T. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ #define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE (t) \ ? ~ (t) 0 \ : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
I must admit I don't know what an integer with padding bits would look like. Can someone check what the C standard has to say about the bit-not operator? According to what GCC currently does, there is no integer overflow anywhere in this code: bit-not expressions never overflow, and a integer shift of -1 by (sizeof - 1) bits does not change the sign, and therefore doesn't overflow.
Even with -Woverflow, GCC does not warn when these macros are used for type "int".
Bernd
[Prev in Thread] | Current Thread | [Next in Thread] |