This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: changing "configure" to default to "gcc -g -O2 -fwrapv ..."
> > > I suppose there is
> > >
> > > *hv = (HOST_WIDE_INT) -(unsigned HOST_WIDE_INT) h1;
> > >
> > > to make it safe.
> >
> > Can't that conversion overflow?
>
> Not on a two's complement machine,
Then I'm confused about C's arithmetic rules. Suppose h1 is 1. It's cast
to unsigned, so stays as 1. Now we do unary minus in unsigned. That's ~0
because it's done mod 2**32, but interpreted as a POSITIVE number. Now,
that positive number overflows when converted to signed (the intent is for
that overflow make it negative). Am I missing something (quite likely!)?