Olivier Lecarme wrote ...
> /net/packages/GNU/gcc-2.95.2/gcc/p/rts/error.pas: In function `Geterrormessage': > /net/packages/GNU/gcc-2.95.2/gcc/p/rts/error.pas:365: Internal compiler error in > `copy_to_mode_reg', at gcc-2.95.2/gcc/explow.c:669
> In what direction should I try to understand what occurs, or to repair > it?
If you take a look at explow.c:669, you'll see the "offending" line. I made the following changes and managed to compile gpc. Note that these changes were properly not the right ways to fix the code. They were just bypassing the real problems. Please use these changes with your own risk.
A) changes to explow.c
gcc-2.95.2/gcc> DIFF explow.c.orig explow.c --- explow.c.orig Tue Feb 15 10:30:22 2000 +++ explow.c Tue Feb 15 13:28:02 2000 @@ -662,12 +662,14 @@
/* If not an operand, must be an address with PLUS and MULT so do the computation. */ if (! general_operand (x, VOIDmode)) x = force_operand (x, temp); +/* if (GET_MODE (x) != mode && GET_MODE (x) != VOIDmode) abort (); +*/ if (x != temp) emit_move_insn (temp, x); return temp; }
B) changes to expr.c
gcc-2.95.2/gcc> DIFF expr.c.orig expr.c --- expr.c.orig Tue Feb 15 17:06:54 2000 +++ expr.c Tue Feb 15 17:09:31 2000 @@ -2587,12 +2587,14 @@ enum machine_mode mode = GET_MODE (x);
x = protect_from_queue (x, 1); y = protect_from_queue (y, 0);
+/* if (mode == BLKmode || (GET_MODE (y) != mode && GET_MODE (y) != VOIDmode)) abort (); +*/
/* Never force constant_p_rtx to memory. */ if (GET_CODE (y) == CONSTANT_P_RTX) ; else if (CONSTANT_P (y) && ! LEGITIMATE_CONSTANT_P (y))
I made the changes. GPC compiled correctly, and for the present seems to work.
Olivier Lecarme