------- Comment #10 from dave at hiauly1 dot hia dot nrc dot ca 2008-10-23 13:25 ------- Subject: Re: [4.4 Regression] Small structs are not passed correctly on hppa64-*-*
> --- function.c.jj10 2008-09-30 16:57:11.000000000 +0200 > +++ function.c 2008-10-22 17:32:26.000000000 +0200 > @@ -2436,7 +2436,9 @@ assign_parm_remove_parallels (struct ass > if (GET_CODE (entry_parm) == PARALLEL && GET_MODE (entry_parm) != BLKmode) > { > rtx parmreg = gen_reg_rtx (GET_MODE (entry_parm)); > - emit_group_store (parmreg, entry_parm, NULL_TREE, > + emit_group_store (parmreg, entry_parm, > + data->nominal_mode == data->passed_mode > + ? data->passed_type : NULL_TREE, > GET_MODE_SIZE (GET_MODE (entry_parm))); > entry_parm = parmreg; > } > patch fixes this for me (at least, from eyeballing assembly and/or RTL from a > cross compiler), though I'm not sure if data->passed_type or > data->nominal_type > should be used and whether the data->nominal_mode == data->passed_mode guard > is > needed or not. This fixes the PR. I will try the version without the guard when the testsuite run completes this morning. Thanks, Dave -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37316