[gnu.gcc.bug] store_one_arg gives wrong alignment to emit_block_move

cudcv@warwick.ac.uk (Rob McMahon) (09/29/88)

GCC 1.28.

The subject says it all really.  I only noticed this by inspection, but it
looks like a bug waiting to hit someone.  store_one_arg() in expr.c calls
emit_block_move with an align argument of TYPE_ALIGN (...) which is in bits,
whereas it wants it in bytes.

Fix:

RCS file: expr.c,v
retrieving revision 1.9.1.7
diff -c -r1.9.1.7 expr.c
*** /tmp/,RCSt1a01426	Wed Sep 28 20:06:37 1988
--- expr.c	Wed Sep 28 19:36:17 1988
***************
*** 4285,4291 ****
  	   local variable or parameter.  In that case, expand_expr
  	   does not fill our suggested target.  */
  	emit_block_move (arg->stack, arg->value, ARGS_SIZE_RTX (arg->size),
! 			 TYPE_ALIGN (TREE_TYPE (pval)));
  
        /* Now, if this value wanted to be partly in registers,
  	 move the value from the stack to the registers
--- 4285,4291 ----
  	   local variable or parameter.  In that case, expand_expr
  	   does not fill our suggested target.  */
  	emit_block_move (arg->stack, arg->value, ARGS_SIZE_RTX (arg->size),
! 			 TYPE_ALIGN (TREE_TYPE (pval)) / BITS_PER_UNIT);
  
        /* Now, if this value wanted to be partly in registers,
  	 move the value from the stack to the registers

Rob
-- 
UUCP:   ...!mcvax!ukc!warwick!cudcv	PHONE:  +44 203 523037
JANET:  cudcv@uk.ac.warwick             ARPA:   cudcv@warwick.ac.uk
Rob McMahon, Computing Services, Warwick University, Coventry CV4 7AL, England