[M3devel] another Snow Leopard compiler crash

Mika Nystrom mika at async.caltech.edu
Mon Dec 27 11:16:53 CET 2010


===> calarm/regress/ximport
--- building in I386_DARWIN ---

new source -> compiling Main.m3
"../src/Main.m3", line 258: warning: potentially unhandled exception: Main.ParamErr
"../src/Main.m3", line 260: warning: potentially unhandled exception: Main.ParamErr
"../src/Main.m3", line 261: warning: potentially unhandled exception: Main.ParamErr
3 warnings encountered
../src/Main.m3: In function 'Main__DumpMatching__DumpOne':
../src/Main.m3:225:0: error: unable to find a register to spill in class 'CREG'
../src/Main.m3:225:0: error: this is the insn:
(insn 5 4 6 2 ../src/Main.m3:204 (parallel [
            (set (reg:SI 0 ax [130])
                (const_int 0 [0x0]))
            (set (reg:SI 1 dx [128])
                (plus:SI (ashift:SI (reg:SI 0 ax [130])
                        (const_int 2 [0x2]))
                    (reg:SI 1 dx [128])))
            (set (reg:SI 4 si [129])
                (plus:SI (ashift:SI (reg:SI 0 ax [130])
                        (const_int 2 [0x2]))
                    (reg:SI 4 si [129])))
            (set (mem/s/c:BLK (reg:SI 1 dx [128]) [0 trade+0 S24 A64])
                (mem/s/c:BLK (reg:SI 4 si [129]) [0 trade+0 S24 A32]))
            (use (reg:SI 0 ax [130]))
        ]) 838 {*rep_movsi} (expr_list:REG_UNUSED (reg:SI 0 ax [130])
        (expr_list:REG_UNUSED (reg:SI 4 si [129])
            (expr_list:REG_UNUSED (reg:SI 1 dx [128])
                (nil)))))
../src/Main.m3:225:0: internal compiler error: in spill_failure, at reload1.c:2163
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
  m3_backend => 4
m3cc (aka cm3cg) failed compiling: Main.mc
compilation failed => not building program "ximport"
Fatal Error: package build failed

Here is the code:

PROCEDURE DumpMatching(tr : TickerRef;
                       trades, bids, asks : HFDataSSeq.T) RAISES { Wr.Failure } =

  PROCEDURE DumpOne(trade, bid, ask : HFData.S) RAISES { Wr.Failure } =
    BEGIN
      <* ASSERT trade.time = bid.time AND bid.time = ask.time *>
      Wr.PutText(wr, Fmt.LongReal(trade.time));

      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(aFactor*trade.pv.price));
      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(FLOAT(trade.pv.volume,LONGREAL)/aFactor));

      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(aFactor*bid.pv.price));
      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(FLOAT(bid.pv.volume,LONGREAL)/aFactor));

      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(aFactor*ask.pv.price));
      Wr.PutChar(wr, ' ');
      Wr.PutText(wr, Fmt.LongReal(FLOAT(ask.pv.volume,LONGREAL)/aFactor));

      Wr.PutChar(wr, '\n')
    END DumpOne;

  CONST
    NoTime = FIRST(Time.T);
  VAR
    wr := FileWr.Open(odir & "/" & tr.ticker);
    tp, bp, ap := 0;
    ttime, btime, atime := NoTime;
    aFactor : LONGREAL := 1.0d0;
  BEGIN
    WHILE tp < trades.size() AND bp < bids.size() AND ap < asks.size() DO
      IF ttime = NoTime THEN ttime := trades.get(tp).time END;
      IF btime = NoTime THEN btime := bids.get(bp).time END;
      IF atime = NoTime THEN atime := asks.get(ap).time END;

      IF ttime = btime AND btime = atime THEN
        DumpOne(trades.get(tp),bids.get(bp),asks.get(ap));
        INC(tp); INC(bp); INC(ap);
        ttime := NoTime; btime := NoTime; atime := NoTime
      ELSIF ttime < btime OR ttime < atime THEN
        INC(tp); ttime := NoTime
      ELSIF btime < atime OR btime < ttime THEN
        INC(bp); btime := NoTime
      ELSIF atime < btime OR atime < ttime THEN
        INC(ap); atime := NoTime
      END
    END;
    Wr.Close(wr)
  END DumpMatching;

    Miika



More information about the M3devel mailing list