From ccdecf58a9337645c2cc5e26a0dfb8612b6e3e56 Mon Sep 17 00:00:00 2001 From: Richard Kenner Date: Mon, 14 Mar 1994 17:31:43 -0500 Subject: [PATCH] (assign_parms, expand_function_start): Properly set MEM_IN_STRUCT_P for DECL_RTL of function result. From-SVN: r6791 --- gcc/function.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/gcc/function.c b/gcc/function.c index a66e3367831..a266ead2c25 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -3707,8 +3707,19 @@ assign_parms (fndecl, second_time) /* If this "parameter" was the place where we are receiving the function's incoming structure pointer, set up the result. */ if (parm == function_result_decl) - DECL_RTL (DECL_RESULT (fndecl)) - = gen_rtx (MEM, DECL_MODE (DECL_RESULT (fndecl)), DECL_RTL (parm)); + { + tree result = DECL_RESULT (fndecl); + tree restype = TREE_TYPE (result); + + DECL_RTL (result) + = gen_rtx (MEM, DECL_MODE (result), DECL_RTL (parm)); + + MEM_IN_STRUCT_P (DECL_RTL (result)) + = (TREE_CODE (restype) == RECORD_TYPE + || TREE_CODE (restype) == UNION_TYPE + || TREE_CODE (restype) == QUAL_UNION_TYPE + || TREE_CODE (restype) == ARRAY_TYPE); + } if (TREE_THIS_VOLATILE (parm)) MEM_VOLATILE_P (DECL_RTL (parm)) = 1; @@ -4889,9 +4900,15 @@ expand_function_start (subr, parms_have_cleanups) } } if (value_address) - DECL_RTL (DECL_RESULT (subr)) - = gen_rtx (MEM, DECL_MODE (DECL_RESULT (subr)), - value_address); + { + DECL_RTL (DECL_RESULT (subr)) + = gen_rtx (MEM, DECL_MODE (DECL_RESULT (subr)), value_address); + MEM_IN_STRUCT_P (DECL_RTL (DECL_RESULT (subr))) + = (TREE_CODE (TREE_TYPE (DECL_RESULT (subr))) == RECORD_TYPE + || TREE_CODE (TREE_TYPE (DECL_RESULT (subr))) == UNION_TYPE + || TREE_CODE (TREE_TYPE (DECL_RESULT (subr))) == QUAL_UNION_TYPE + || TREE_CODE (TREE_TYPE (DECL_RESULT (subr))) == ARRAY_TYPE); + } } else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode) /* If return mode is void, this decl rtl should not be used. */ -- 2.30.2