[MLton] front-end functor bug

Stephen Weeks MLton@mlton.org
Fri, 6 Feb 2004 19:12:59 -0800


> I've encountered a front-end bug with the Moby sources; unfortunately I
> can't boil it down to a smaller example

Here's a small example that shows the problem.

functor F () =
   struct
      val A = 0
   end
structure S =
   struct
      datatype z = A
      structure F = F ()
   end

>    a) a functor RegisterAllocator includes the following declarations in
>       its body:
> 	   val SPILL_COALESCING       = 0wx100
> 	   val SPILL_COLORING         = 0wx200
...
>    Now, when compiling the program, I get errors like:
> 	Error: z.sml 18294.7: pattern and expression disagree
> 	   pattern:    [raPhase]
> 	   expression: [mode]
> 	   in: SPILL_COLORING = 0wx200
>    which appears to indicate that SPILL_COLORING is being granted
>    constructor status, despite the fact that this declaration corresponds
>    to (a).

Yep, that's the problem.  There was a bug in the implementation of
functor closures that forgot to "zero out" the constructors before
re-elaborating the functor body.  You would only ever see it if the
constructor was not in scope at the functor definition.

I've checked in a fix.