This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Wrong warning? ISO C restric ts enumerator values to range of âintâ
On 2008-02-06 21:17:53 +0100, Manuel López-Ibáñez wrote:
> On 06/02/2008, Vincent Lefevre <vincent+gcc@vinc17.org> wrote:
> > The problem is the cast (suggested by Dave Korn), not the enum itself:
> > (int) 0x80001000
> >
>
> What is the problem with the cast? Do you want a warning for the
> conversion that you asked for with the cast? We want about implicit
> conversions with -Wconversion but if you use a cast, we understand
> that you really mean to perform the conversion.
The problem is that the conversion here is implementation-defined,
and may raise a signal on some platforms; so, this is a non-portable
construct. I think that a warning should be issued because the value
is out-of-range. This would allow to detect problems that can arise
on some platforms, e.g. with code like:
#include <stdio.h>
#include <limits.h>
int main (void)
{
printf ("%ld\n", (long) UINT_MAX);
return 0;
}
On platforms where int and long have the same size (so that UINT_MAX
isn't representable in a long), a warning would be useful.
--
Vincent Lefèvre <vincent@vinc17.org> - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)