From: Richard Henderson Date: Fri, 25 May 2001 19:05:24 +0000 (-0700) Subject: function.c (expand_function_start): Don't abort on PARALLEL returns from hard_functio... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=80a480ca1619ef0447017f63e48d78d659699d6e;p=gcc.git function.c (expand_function_start): Don't abort on PARALLEL returns from hard_function_value. * function.c (expand_function_start): Don't abort on PARALLEL returns from hard_function_value. From-SVN: r42577 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 091d66f5341..cdf1ca58bca 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-05-25 Richard Henderson + + * function.c (expand_function_start): Don't abort on PARALLEL + returns from hard_function_value. + 2001-05-25 Richard Henderson * config/i386/i386.md: Revert previous change. Do not apply diff --git a/gcc/function.c b/gcc/function.c index 6aeed3e9bbc..161173e8d69 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -6378,17 +6378,19 @@ expand_function_start (subr, parms_have_cleanups) = hard_function_value (TREE_TYPE (DECL_RESULT (subr)), subr, 1); - /* Since we know the return value is not an aggregate, we should - have a REG here. */ - if (!REG_P (hard_reg)) - abort (); + /* Structures that are returned in registers are not aggregate_value_p, + so we may see a PARALLEL. Don't play pseudo games with this. */ + if (! REG_P (hard_reg)) + SET_DECL_RTL (DECL_RESULT (subr), hard_reg); + else + { + /* Create the pseudo. */ + SET_DECL_RTL (DECL_RESULT (subr), gen_reg_rtx (GET_MODE (hard_reg))); - /* Create the pseudo. */ - SET_DECL_RTL (DECL_RESULT (subr), - gen_reg_rtx (GET_MODE (hard_reg))); - /* Needed because we may need to move this to memory - in case it's a named return value whose address is taken. */ - DECL_REGISTER (DECL_RESULT (subr)) = 1; + /* Needed because we may need to move this to memory + in case it's a named return value whose address is taken. */ + DECL_REGISTER (DECL_RESULT (subr)) = 1; + } } /* Initialize rtx for parameters and local variables.