aboutsummaryrefslogtreecommitdiff
path: root/gcc/function.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/function.c')
-rw-r--r--gcc/function.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index d8008f6..d616f5f 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)