Sat, 21 Apr 2001 14:52:51 -0700 (PDT)
I finally figured out why I consistently get a Time exception when running even
the newest G0 MLton on one of my machines (starlinux). First hint: the machine
has been up for 281 days. Second hint: 281 * 24 * 60 * 60 * 100 = 2,427,840,000
Recall that Posix.ProcEnv.times returns (via the times function) the elapsed
number of clock ticks since the system came up. Despite the fact that the man
pages say that times returns a clock_t, which is a long int, in fact, times
appears to be returning an unsigned int. That is, a call to times on starlinux
returns something like 0x90f24469, which has the high bit set. Both MLton and
SML/NJ assume that clock_t is signed, and therefore think that the elapsed time
is negative, and raise a Time exception.
So, the following simple program causes a Time exception on any machine that has
been up more than ~248.6 days and has CLK_TICK = 100.
val _ = Posix.ProcEnv.times()
I think that the right fix is to translate clock_t into Word.word in MLton and
to send a bug report to the SML/NJ folks.