Peter Schorn wrote:
The following program crashes the compiler (gpc345u2 on Mac OS 10.4.4):
program rs;
{ compile with gpc rs.pas }
var a: integer;
begin readstring(a); { internal compiler error: Bus error } end.
Hmm, I think I caused this error, by adding ReadString to predef.def
diff -urN gcc-3.4.5-orig/gcc/p/predef.def gcc-3.4.5/gcc/p/predef.def @@ -436,6 +442,7 @@ PREDEF_ROUTINE (Read, "-,|", ER_IOCRITICAL, ANY_PASCAL) PREDEF_ROUTINE (ReadLn, "-,|", ER_IOCRITICAL, ANY_PASCAL) PREDEF_ROUTINE (ReadStr, "-x,|", 0, E_O_PASCAL) +PREDEF_ALIAS (ReadString, ReadStr, "-x,|", 0, MAC_PASCAL) PREDEF_ROUTINE_NO_ID (Read_Init, "-Fi", 0) PREDEF_ROUTINE_NO_ID (ReadStr_Init, "psi", 0) PREDEF_ROUTINE_NO_ID (ReadWriteStr_Done, "-F", 0)
without patching predef.c (and possibly elsewhere)
/* Read from files and strings. */ static tree build_read (int r_num, tree params, const char *r_name) { tree file, parm; if (r_num == p_ReadStr)
When, in your test program, you replace ReadString with ReadStr, you correctly get the error message the compiler should issue:
error: argument 1 to `ReadStr' must be the string to read from
Thanks for the report.
Regards,
Adriaan van Os