This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
stack-parm-1.patch
- To: kenner at vlsi1 dot ultra dot nyu dot edu
- Subject: stack-parm-1.patch
- From: Doug Evans <devans at cygnus dot com>
- Date: Mon, 20 Oct 1997 15:39:01 -0700
- cc: egcs-bugs at cygnus dot com
This patch fixes a bug in function.c:assign_parms.
In an `else' we have
else
{
/* Value must be stored in the stack slot STACK_PARM
during function execution. */
if (promoted_mode != nominal_mode)
{
... convert entry_parm to nominal_mode ...
}
then we have
if (entry_parm != stack_parm)
{
...
if (promoted_mode != nominal_mode)
{
push_to_sequence (conversion_insns);
emit_move_insn (validize_mem (stack_parm),
validize_mem (entry_parm));
Note that while the mode of entry_parm is converted to nominal_mode,
the mode of stack_parm is not and hence emit_move_insn will abort.
Thu Oct 16 10:37:14 1997 Doug Evans <dje@canuck.cygnus.com>
* function.c (assign_parms): Correct mode of stack_parm if
entry_parm underwent a mode conversion.
*** function.c.orig Thu Aug 28 11:14:05 1997
--- function.c Thu Oct 16 10:40:16 1997
*************** assign_parms (fndecl, second_time)
*** 4053,4058 ****
--- 4053,4064 ----
push_to_sequence (conversion_insns);
entry_parm = convert_to_mode (nominal_mode, tempreg,
TREE_UNSIGNED (TREE_TYPE (parm)));
+ if (stack_parm)
+ {
+ /* ??? This may need a big-endian conversion on sparc64. */
+ stack_parm = change_address (stack_parm, nominal_mode,
+ NULL_RTX);
+ }
conversion_insns = get_insns ();
did_conversion = 1;
end_sequence ();