[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
More news from the trenches.
Hi Michael and Juergen,
In compiling the latest (951218) sources under Oberon-A I've encountered
some problems that need attention.
* In frontend/GuardCond.mod, lines 111-114, the expression is too
complicated for Oberon-A. I've replaced it in my sources with:
ELSIF (merge. opndList. arg IS D.Guard) &
(merge. opndList. nextOpnd. arg IS D.Guard) THEN
IF (merge. opndList. arg(D.Guard). opndList. arg =
merge. opndList. nextOpnd. arg(D.Guard). opndList. arg) THEN
...
END
END
* When compiling frontend/first_steps/Type.mod, OOC suffers an NIL
pointer trap in module Data.mod, at line 626, col 24. This appears to
occur when OOC reaches pos 199 in the source file.
* There is a problem when reading symbol files containing the following
kind of construct:
TYPE
T1Ptr = POINTER TO T1;
T1 = RECORD
f1 : T1Ptr;
...
END;
This can be observed by compiling any module that imports module Files
as defined in optimizers/libstubs/Files.mod. The problem appears to be
that StdTypes.StructAlloc() is called for T1 *before* being called for
T1Ptr. The default size given to T1Ptr by Data.InitStruct() is
MIN(LONGINT), and this value is being used to calculate the size and
field offsets for T1. In extreme cases this causes arithmetic
overflows in StdTypes.StructAlloc(). I've added logging statements to
my version of StdTypes that illustrate the problem. Call OOC with the
-log argument to activate the logging.
The problems I reported earlier appear to have been fixed.
Frank