diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5c01e68bda4..5a199711ffa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-01-22 Eric Botcazou + + PR target/13559 + * config/sparc/sparc.c (function_arg_record_value_3): Revert + to 'word_mode' once the first slot has been filled. + 2004-01-22 Olivier Hainque * config/sparc/sparc.c (function_arg_record_value_1): Fix diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index d3eb9986ed5..8805bbeb4dc 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -4972,7 +4972,7 @@ struct function_arg_record_value_parms int named; /* whether the argument is named. */ int regbase; /* regno of the base register. */ int stack; /* 1 if part of the argument is on the stack. */ - int intoffset; /* offset of the pending integer field. */ + int intoffset; /* offset of the first pending integer field. */ unsigned int nregs; /* number of words passed in registers. */ }; @@ -5124,6 +5124,7 @@ function_arg_record_value_3 (HOST_WIDE_INT bitpos, this_slotno += 1; intoffset = (intoffset | (UNITS_PER_WORD-1)) + 1; + mode = word_mode; parms->nregs += 1; intslots -= 1; } @@ -5251,6 +5252,7 @@ function_arg_record_value (tree type, enum machine_mode mode, parms.intoffset = 0; function_arg_record_value_1 (type, 0, &parms, false); + /* Take into account pending integer fields. */ if (parms.intoffset != -1) { unsigned int startbit, endbit;