Browse thread
Re: [Caml-list] Pattern matcher no more supposed to warn on non exhaustive patterns ?
- Luc Maranget
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2001-10-04 (07:06) |
From: | Luc Maranget <luc.maranget@i...> |
Subject: | Re: [Caml-list] Pattern matcher no more supposed to warn on non exhaustive patterns ? |
Hello > > The issue with threads is a bit more troublesome. Consider: > > let x : (int->int) option ref =3D ref (Some (fun x -> x));; > > let foo z =3D > match z with > {contents=3DNone} -> 0 > | {contents=3DSome(f)} -> f(0); > > Now suppose I fork two threads: > > Thread 1: foo x > Thread 2: x :=3D None > > And suppose that Thread 1 runs long enough that it does the first > match, so it assumes the contents of x is not of the form None. =20 > Now Thread 1 gets descheduled, Thread 2 runs, and sets the > contents of x to None. Then Thread 2 continues with the second > match... > > The question is, does Caml core dump because the pattern matcher > assumes that the contents *has* to be a Some(-) in the second > case? Or does it do the derefence and check atomically? Or > does it add a default case that raises a Match exception? =20 The compiled code is something like (if match/54 (apply (field 0 match/54) 0) 0) So the answer is: yes it coredumps. > > -Greg > ------------------- --Luc ------------------- Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr