Hi,
  I've had a bit of a dig at this one.

First of all you actually need very little code to trigger it; using the
cc1 I can give it:

void
__throw ()
{
  struct eh_context *eh;
  void *handler;
  long offset;
   
  __builtin_eh_return ((void *)eh, offset, handler);
}

(I just kept taking bits out until the error remained).

with the options:

./cc1 -da dgdebug_e.i -quiet -g -g1 -version -fPIC -fexceptions  -o
/tmp/ccSa2Tca.s -O1

and it throws the error:

dgdebug_e.i: In function `__throw':
dgdebug_e.i:9: Internal compiler error:
dgdebug_e.i:9: internal error--insn does not satisfy its constraints:

(insn 40 45 41 (set (reg:DI 23 $23)
        (plus:DI (reg:DI 30 $30)
            (reg:DI 43 $f11))) 9 {adddi3} (nil)
    (nil))

Dropping the -O causes the error to disappear.

The thing which I noticed is the '$f11' - isn't that a floating point
register? How did he get into there?

So with -da I looked at the debug files; .lreg (to me) doesn't seem to
have any reference to floating point in it but .greg does (and I don't
know where the add has come from).

Suggestions on where to look further?

Dave

 ---------------- Have a happy GNU millennium! ----------------------   
/ Dr. David Alan Gilbert    | Running GNU/Linux on Alpha,68K| Happy  \ 
\ gro.gilbert @ treblig.org | MIPS,x86,ARM, SPARC and HP-PA | In Hex /
 \ _________________________|_____ http://www.treblig.org   |_______/


Reply via email to