Hi Steve,

On Fri, 15 Apr 2011, Steve Ellcey wrote:

> I was curious if anyone was still looking at this problem?

I didn't because it occurred only on an experimental port.

> I see this on IA64 HP-UX in 32 bit mode

Which means it also occurs with something else now (well, ia64 hp-ux, but 
at least something :) )

> to do.  The tree (treeop0) that op0 is generated from is below and when 
> we call expr_expr the modifier is EXPAND_INITIALIZER.  Should 
> expand_expr return an SImode expression for this tree (ptr_mode) or a 
> DImode expression (Pmode) in this case?

Callers of expand_expr are expected to deal with the situation that the 
returned object doesn't have the desired mode, hence I think it's okay for 
expand_expr to return a DImode code_label rtx.  Meaning we have to deal 
with it.  The patch of HJ is a first step but doesn't cater for op0 being 
a CONST_INT, which doesn't have a mode, hence at the very least the code 
should look like:

    enum machine_mode inner_mode = GET_MODE (op0);
    if (inner_mode == VOIDmode)
      inner_mode = TYPE_MODE (inner_type);

I do wonder what other places in expand really would need something 
similar.  Right now nothing else ICEs but perhaps silently generates code 
that only works by accident.  Well, I guess we'll see.


Ciao,
Michael.

Reply via email to