On Tue, Aug 16, 2011 at 5:06 PM, John Carr <[email protected]> wrote:

>
> Richard W.M. Jones <[email protected]> wrote:
>
> > On Tue, Aug 16, 2011 at 11:37:03AM +0400, Dmitry Bely wrote:
> > > C compiler first puts "list" pointer on stack and then calls
> > > caml_copy_string(*s), potentially invalidating "list". Of course, the
> > > stack copy of "list" is not registered as a global root so wrp_ml_cons
> > > gets an invalid value.
> >
> > I think this must be a bug in your C compiler.  The address of list is
> > stashed in the roots struct, so the C compiler should know that list
> > can be changed by the call to caml_copy_string.
>

Maybe looking at the assembly output would help. If you can post the output
with gcc -S flag.

Cheers;
Wojciech

The call
>
>   f(g(), x)
>
> can behave as either
>
>  temp1 = g()
>  temp2 = x
>  f(temp1, temp2)
>
> or
>
>  temp1 = x
>  temp2 = g()
>  f(temp2, temp1)
>
> The order does not need to be deterministic.
>
> If the call to g() changes x, the second order results in the
> function f() receiving the "wrong" value.
>
>    --John Carr ([email protected])
>
> --
> Caml-list mailing list.  Subscription management and archives:
> https://sympa-roc.inria.fr/wws/info/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>

-- 
Caml-list mailing list.  Subscription management and archives:
https://sympa-roc.inria.fr/wws/info/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to