FYI: my h8/300h builds are failing with the same message, but with
different types.  Haven't investigated yet.

> What size is the internal 'sizetype'?

16 bits.

> Is there an integer type with the same width as the pointer type?

No.  The m32c doesn't have enough operators to have a pointer-sized
sizetype (specifically, it needs an arbitrary-multiply op).

There is a PSImode type, but no C type to correspond to it.

Pointers are 24 bits because the address registers are physically 24
bits wide, and there are some math operators that operate on them
directly (adding and shifting, mostly).  But 24 bit math is
incomplete, and 32 bit math is a LOT more expensive than 16 bit math.

> Basically the problems look like converting a pointer to an integer
> always either extends or truncates which is both prohibited in the
> GIMPLE IL (as the pointer doesn't have a sign we don't know whether
> to sign- or zero-extend it).

In this case, though, we *are* doing signed arithmatic on it before
converting.  Plus, the code would work (for m32c) if there were no
conversion at all - just leave it as a pointer type.

> Richard.
> 
> >  [ gdb ] up
> >  #3  0x085588ec in verify_gimple_2 (stmts=0xb6e7c738) at 
> > ../../gcc/gcc/tree-cfg.c:4126
> >  4126                bool err2 = verify_gimple_stmt (stmt);
> >
> >  [ gdb ] call debug_generic_expr (stmts)
> >  D.25526 = &this->D.17063._vptr.basic_ostream;
> >  D.25527 = *D.25526;
> >  D.25528 = D.25527 + -12;
> >  D.25529 = *D.25528;
> >  D.25530 = (unsigned int) D.25529;
> >  D.25531 = this + D.25530;
> >  *.LTHUNK0 (D.25531);

Reply via email to