m32c support for named addr spaces branch

Ulrich Weigand uweigand@de.ibm.com
Mon Oct 19 14:28:00 GMT 2009


DJ Delorie wrote:

> Found it, bug in expr.c:
> 
> Index: expr.c
> ===================================================================
> --- expr.c	(revision 152895)
> +++ expr.c	(working copy)
> @@ -4248,13 +4248,13 @@ expand_assignment (tree to, tree from, b
>  	    }
>  
>  	  offset_rtx = expand_expr (offset, NULL_RTX, VOIDmode, EXPAND_SUM);
>  	  address_mode
>  	    = targetm.addr_space.address_mode (MEM_ADDR_SPACE (to_rtx));
>  	  if (GET_MODE (offset_rtx) != address_mode)
> -	    offset_rtx = convert_to_mode (address_mode, offset_rtx, 0);
> +	    offset_rtx = convert_to_mode (address_mode, offset_rtx, POINTERS_EXTEND_UNSIGNED);

I'm not sure POINTERS_EXTEND_UNSIGNED is the correct test here; the offset
is not itself a pointer type.  What if the offset actually *is* a negative
value of a smaller, signed type?

Maybe this should take the signed-ness of the type of "offset" into
account instead.

(B.t.w. there are more instances of computing address offsets that should
probably be handled analogously.  Look for other instances of offset_address
in expr.c ...)

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com



More information about the Gcc-patches mailing list