Problem with component extractions

Richard Kenner kenner@vlsi1.ultra.nyu.edu
Fri Mar 3 12:42:00 GMT 2000


I commited this fix to an obscure problem involving extractions of
components of records that are themselves records in big endian machines.

Fri Mar  3 14:56:12 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* expr.c (expand_expr, case COMPONENT_REF): Use bitfield case if
	result is a RECORD_TYPE.

*** expr.c.mar3	Tue Feb  1 17:09:54 2000
--- expr.c	Fri Mar  3 12:53:13 2000
*************** expand_expr (exp, target, tmode, modifie
*** 6000,6004 ****
  		    || (mode1 != BLKmode && SLOW_UNALIGNED_ACCESS
  			&& ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode))
! 			    || (bitpos % GET_MODE_ALIGNMENT (mode) != 0)))))
  	    || (modifier != EXPAND_CONST_ADDRESS
  		&& modifier != EXPAND_INITIALIZER
--- 6000,6014 ----
  		    || (mode1 != BLKmode && SLOW_UNALIGNED_ACCESS
  			&& ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode))
! 			    || (bitpos % GET_MODE_ALIGNMENT (mode) != 0)))
! 		    /* If the type and the field are a constant size and the
! 		       size of the type isn't the same size as the bitfield,
! 		       we must use bitfield operations.  */
! 		    || ((bitsize >= 0
! 			 && (TREE_CODE (TYPE_SIZE (TREE_TYPE (exp)))
! 			     == INTEGER_CST)
! 			 && ((TREE_INT_CST_HIGH (TYPE_SIZE (TREE_TYPE (exp)))
! 			      != 0)
! 			     || (TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (exp)))
! 				 != bitsize))))))
  	    || (modifier != EXPAND_CONST_ADDRESS
  		&& modifier != EXPAND_INITIALIZER


More information about the Gcc-patches mailing list