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)

Reply via email to