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.