English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
Re: [Caml-list] Bug in typing polymorphic variants found
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2002-05-10 (15:02)
From: Luc Maranget <luc.maranget@i...>
Subject: Re: [Caml-list] Bug in typing polymorphic variants found
> > Hmmm. That is bug #491 in the bug tracker,
> > and its categorized "not a bug" which it clearly is. 
> OK. I think I have found it. Heh. Or rather, Ocaml 3.01
> found it for me. There is a bug in the typing of polymophic variants.
> What happens: Ocaml 3.01 reports a type error.
> Ocaml 3.04 does not, it crashes at run time instead.
> [.. this is confusing but, I think it crashes even when the bug
> in my code is fixed .. this is definitely the same problem I
> had before and reported in bug #491]
> The offending lines of code are:
>        match dcl with
>         | `DCL_val_typeof e ->
>           Hashtbl.add dfns n (id,sr,parent,`SYMDEF_dcl dcl)

> The match is matching on values of type dcl_t
> The value `DCL_val_typeof _ is NOT a member of the type dcl_t,
> so this code will never be executed.
> The type of the Hashtable being used here requires the fourth
> component of the data part to be of a type which includes
> constructor `SYMDEF_dcl of dcl_t.
> Were the above code ever executed, a bad variant would be
> glued into the hash table, since the type of dcl is infered to
> include `DCL_val_typeof _.
> The *problem* is that the type of the constructor argument
> influences its run-time hash? And so the following code,
> which IS executed
>         | `DCL_val t ->
>           Hashtbl.add dfns n (id,sr,parent,`SYMDEF_dcl dcl)
>           ;
> is producing the *wrong* hash for the variant `SYMDEF_dcl dcl,
> because the inference engine thinks the type of dcl is something
> other than dcl_t. When I do a lookup of the hash table later in another 
> module,
> I get a bad value out, since in *that* module, the correct type of the dcl
> is calculated. At least, thats my guess.
> I'll try to make a small example,
> my initial attempts have failed. Otherwise, I'll have to post the
> bogus code to sourceforge where
> the developers can download it.


Typing of polymorphic variants has much changed in 3.XX versions.

Pattern matching compilation of polymorphic variants included a
serious bug in 3.01 (or in 3.02, 3.03 I do not remember) version, and the
effect of this bug would be what you describe.
[If you are interested, this is bug number 359, fixed]

This PM bug is corrected in version 3.04.

Please consider that we do need running code that shows the erroneous
behavior w .r. t. the current version of the compiler.
Making assumpsions based upon the previous versions of the compiler
is a bit delicate here, since two parts that look critical to your
report underwent important modifications.

--Luc Maranget
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners