------- Comment #5 from jakub at gcc dot gnu dot org 2008-09-09 09:08 ------- Indeed, MEM_SIZE is the cause.
--- gcc/function.c.jj 2008-09-08 09:33:51.000000000 +0200 +++ gcc/function.c 2008-09-09 10:59:15.000000000 +0200 @@ -2332,6 +2332,11 @@ assign_parm_find_stack_rtl (tree parm, s stack_parm = gen_rtx_MEM (data->promoted_mode, stack_parm); set_mem_attributes (stack_parm, parm, 1); + /* set_mem_attributes could set MEM_SIZE to the passed mode's size, + while promoted mode's size is needed. */ + if (data->promoted_mode != BLKmode + && data->promoted_mode != DECL_MODE (parm)) + set_mem_size (stack_parm, GEN_INT (GET_MODE_SIZE (data->promoted_mode))); boundary = data->locate.boundary; align = BITS_PER_UNIT; gives: @@ -159,13 +159,13 @@ Fcall_process: ld 9,0(9) # specpdl, ld 11,0(11) # specpdl_ptr, addis 5,31,0x1 #,, - lwz 6,1492(5) # nargs, - std 9,1272(5) # specpdl.19, - li 9,16 # iftmp.21, std 3,1488(5) # nargs, nargs std 4,1496(5) # args, args - cmpwi 7,6,3 #, tmp309, + std 9,1272(5) # specpdl.19, std 11,1280(5) # specpdl_ptr.17, + li 9,16 # iftmp.21, + lwz 6,1492(5) # nargs, + cmpwi 7,6,3 #, tmp309, ble 7,.L3 # addi 9,6,-2 # tmp310, tmp5, extsw 9,9 # tmp311, tmp310 -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- AssignedTo|unassigned at gcc dot gnu |jakub at gcc dot gnu dot org |dot org | Status|UNCONFIRMED |ASSIGNED Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-09-09 09:08:23 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37408