From 42e20fd25d3651349d892d8af864dc576c09019c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 16 Apr 2020 10:15:18 +0200 Subject: [PATCH] bootstrap: Fix building with GCC 4.2 [PR89494] 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. 2020-04-16 Jakub Jelinek PR bootstrap/89494 * function.c (assign_parm_find_data_types): Add workaround for BROKEN_VALUE_INITIALIZATION compilers. --- gcc/ChangeLog | 6 ++++++ gcc/function.c | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 899285cf46f..7e08f789ab2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2020-04-16 Jakub Jelinek + + PR bootstrap/89494 + * function.c (assign_parm_find_data_types): Add workaround for + BROKEN_VALUE_INITIALIZATION compilers. + 2020-04-16 Richard Biener * gdbhooks.py (TreePrinter): Print SSA_NAME_VERSION of SSA_NAME diff --git a/gcc/function.c b/gcc/function.c index d8008f60422..d616f5f64f4 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -2414,7 +2414,15 @@ assign_parm_find_data_types (struct assign_parm_data_all *all, tree parm, { 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) -- 2.30.2