[CLN-list] GCC 4.3 (experimental) -O2 dislikes intparam.h

Ralf Wildenhues Ralf.Wildenhues at gmx.de
Tue Dec 19 14:41:28 CET 2006


* Bruno Haible wrote on Tue, Dec 19, 2006 at 02:13:56PM CET:
> 
> There are hundreds of places in CLN where signed integers are shifted
> left, or where unsigned integers are added, assuming a "modulo 2^n"
> behaviour. Without a GCC diagnostic that points to the source code places
> where gcc does not follow the "modulo 2^n" behaviour, this GCC is unusable
> for CLN.

So you'll need -fwrapv for CLN, as well as -fno-strict-aliasing.

> If the GCC people don't consider it a bug in the compiler, can you please
> ask them for a warning that accompanies these new optimizations?

I intend to, but I'll wade through the thread only after the storm has
calmed down.

> > Next, please note that intparam.c uses exit but does not provide for a
> > prototype.  I recommend returning from main instead.
> 
> Exit and return from main is not the same on VMS.

But then you need a declaration for exit.  FYI, the last variant
Autoconf had can be inferred from this thread:
<http://lists.gnu.org/archive/html/autoconf-patches/2006-04/msg00045.html>

> > Furthermore, please note that the CLN headers cause many "might break
> > strict aliasing" warnings, and a few "will break strict aliasing"
> > warnings.  The latter are (at least) here:
> >   src/complex/ring/cl_C_ring.cc:131
> >   src/rational/ring/cl_RA_ring.cc:129
> >   src/real/ring/cl_R_ring.cc:133
> 
> I think you can ignore these 3 warnings; there is not much opportunity for
> aliasing here.

I don't think the "will break strict aliasing" warnings tell you about
likely failures.  I think they tell you about certain (in the sense of
"for sure") failures, given enough optimization (IOW, without
-fno-strict-aliasing).  IIRC, GCC is entitled to think that the
converted pointer points to uninitialized data, and fill in whatever
it likes.  So yes, there is aliasing involved here, between the pointer
 (cl_number_ring_ops<cl_number>*) &N_ops

and the pointer &N_ops, but reading the former doesn't guarantee to give
you the data pointed to by the latter.

Cheers,
Ralf


More information about the CLN-list mailing list