This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Minor expr.c patches


This fixes a bug in my last change and also deals with an obscure case of
COMPONENT_REF in the LHS of an assignment.  Test cases are in Ada.  Tested
on alphaev56.

Thu Jun 28 06:16:45 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_assignment): When have varying-length object,
	make MEM a BLKmode.
	(expand_expr, case ADDR_EXPR): Use SAVE_EXPR_RTL after putting
	SAVE_EXPR stack in case we had a SUBREG.

*** expr.c	2001/06/20 07:18:08	1.329
--- expr.c	2001/06/28 10:10:32
*************** expand_assignment (to, from, want_value,
*** 3811,3815 ****
  	  rtx from_rtx = expand_expr_unaligned (from, &from_align);
  	  rtx inner_to_rtx
! 	    = change_address (to_rtx, VOIDmode,
  			      plus_constant (XEXP (to_rtx, 0),
  					     bitpos / BITS_PER_UNIT));
--- 3811,3815 ----
  	  rtx from_rtx = expand_expr_unaligned (from, &from_align);
  	  rtx inner_to_rtx
! 	    = change_address (to_rtx, BLKmode,
  			      plus_constant (XEXP (to_rtx, 0),
  					     bitpos / BITS_PER_UNIT));
*************** expand_expr (exp, target, tmode, modifie
*** 7040,7044 ****
  		   forcing the SAVE_EXPR into memory.  */
  		if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR)
! 		  put_var_into_stack (TREE_OPERAND (exp, 0));
  		else
  		  {
--- 7040,7047 ----
  		   forcing the SAVE_EXPR into memory.  */
  		if (TREE_CODE (TREE_OPERAND (exp, 0)) == SAVE_EXPR)
! 		  {
! 		    put_var_into_stack (TREE_OPERAND (exp, 0));
! 		    op0 = SAVE_EXPR_RTL (TREE_OPERAND (exp, 0));
! 		  }
  		else
  		  {


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]