On Thu, 16 Apr 2020, Jakub Jelinek wrote: > Hi! > > GCC 4.2 (but I think not the latest tip of GCC 4.2 branch) has broken value > initialization, see PR33916. The following patch provides a workaround for > that. Tested with GCC 4.2 on a reduced testcase I've distilled from the > assign_param_data_one class which has been miscompiled the same, > and normally bootstrapped/regtested on x86_64-linux and i686-linux with > a recentish system GCC. Ok for trunk?
OK. Richard. > 2020-04-16 Jakub Jelinek <ja...@redhat.com> > > PR bootstrap/89494 > * function.c (assign_parm_find_data_types): Add workaround for > BROKEN_VALUE_INITIALIZATION compilers. > > --- gcc/function.c.jj 2020-01-12 11:54:36.606410497 +0100 > +++ gcc/function.c 2020-04-15 14:15:29.269495427 +0200 > @@ -2414,7 +2414,15 @@ assign_parm_find_data_types (struct assi > { > int unsignedp; > > +#ifndef BROKEN_VALUE_INITIALIZATION > *data = assign_parm_data_one (); > +#else > + /* Old versions of GCC used to miscompile the above by only initializing > + the members with explicit constructors and copying garbage > + to the other members. */ > + assign_parm_data_one zero_data = {}; > + *data = zero_data; > +#endif > > /* NAMED_ARG is a misnomer. We really mean 'non-variadic'. */ > if (!cfun->stdarg) > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)