Commit ccdecf58 by Richard Kenner

(assign_parms, expand_function_start): Properly set MEM_IN_STRUCT_P

for DECL_RTL of function result.

From-SVN: r6791
parent d4c60bd6
...@@ -3707,8 +3707,19 @@ assign_parms (fndecl, second_time) ...@@ -3707,8 +3707,19 @@ assign_parms (fndecl, second_time)
/* If this "parameter" was the place where we are receiving the /* If this "parameter" was the place where we are receiving the
function's incoming structure pointer, set up the result. */ function's incoming structure pointer, set up the result. */
if (parm == function_result_decl) 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)) if (TREE_THIS_VOLATILE (parm))
MEM_VOLATILE_P (DECL_RTL (parm)) = 1; MEM_VOLATILE_P (DECL_RTL (parm)) = 1;
...@@ -4889,9 +4900,15 @@ expand_function_start (subr, parms_have_cleanups) ...@@ -4889,9 +4900,15 @@ expand_function_start (subr, parms_have_cleanups)
} }
} }
if (value_address) if (value_address)
DECL_RTL (DECL_RESULT (subr)) {
= gen_rtx (MEM, DECL_MODE (DECL_RESULT (subr)), DECL_RTL (DECL_RESULT (subr))
value_address); = 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) else if (DECL_MODE (DECL_RESULT (subr)) == VOIDmode)
/* If return mode is void, this decl rtl should not be used. */ /* If return mode is void, this decl rtl should not be used. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment