[Bug tree-optimization/33383] [4.3 Regression] Revision 128092 miscompiles 400.perlbench

jakub at gcc dot gnu dot org gcc-bugzilla@gcc.gnu.org
Sat Oct 27 09:42:00 GMT 2007



------- Comment #16 from jakub at gcc dot gnu dot org  2007-10-27 09:42 -------
Created an attachment (id=14413)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=14413&action=view)
perl-5.8.7-aliasing.patch

Sure, here is a minimal patch against perl 5.8.7 which cures this (and for
whatever reason happens to apply to SPEC2006 as well).  The
S_{new,del,more}_xiv
changes IMHO aren't controversial at all, perl assumes that IV aka long
can hold a pointer.  For S_{new,del,more}_xnv where NV is double there is an
option to use memcpy as in the patch (for S_new_xnv and S_del_xnv is GCC 4.3
able
to compile exactly the same code as before when those functions are noinline,
S_more_xnv is 2 or 3 insns larger, but nothing serious) which IMHO is standard
conforming, or could e.g. use union { NV nv; NV *xnv; } u; and stuff values
through it (but, as double is bigger than pointer on 32-bit arches wouldn't we
risk issues with signalling NaNs?), or of course can do much bigger changes and
change the data structures that contain e.g. xnv_nv fields to an anonymous
union.

>From quick skimming other S_{new,del,more}_x* routines the other routines don't
violate strict aliasing.


-- 


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



More information about the Gcc-bugs mailing list