> First try a 'make test' from atdgen's source ... The following tests failed: ocaml internals biniou correctness json correctness *** FAILURE *** Thanks to everyone for all the replies. My type defs are small, so at least I can easily bypass the issue by using Yojson directly. On Fri, Sep 5, 2014 at 6:39 PM, Martin Jambon wrote: > On 09/05/2014 03:18 PM, Richard W.M. Jones wrote: > >> On Fri, Sep 05, 2014 at 11:13:02PM +0100, Richard W.M. Jones wrote: >> >>> On Fri, Sep 05, 2014 at 06:06:55PM -0400, Ashish Agarwal wrote: >>> >>>> I increased the stack size to 65532, which is apparently the max >>>> allowed on >>>> a Mac, and it doesn't change the behavior. >>>> >>> >>> Yup. I was able to reproduce this on the non-core version, and indeed >>> increasing the stack to unlimited on Linux does not help. >>> >>> The stack trace is simple: >>> >>> #0 0x00000000004543f4 in camlPervasives__output_string_1198 () >>> #1 0x0000000000472093 in camlCamlinternalFormat__output_acc_60624 () >>> #2 0x0000000000473a32 in camlPrintf__fun_1062 () >>> #3 0x000000000041e776 in camlApp__entry () >>> #4 0x000000000041c5f9 in caml_program () >>> #5 0x0000000000497f7e in caml_start_program () >>> #6 0x000000000049813d in __libc_csu_init () >>> #7 0x00007ffff7317d65 in __libc_start_main () from /lib64/libc.so.6 >>> #8 0x000000000041c2e9 in _start () >>> >>> I'm just installing debuginfo so I can get more symbols .. >>> >> >> .. although I guess the fact that the generated code in config_j.ml is >> doing a lot of Obj.magic would be the first place to be suspicious. >> >> eg: >> >> let (x : postgres) = >> { >> host = Obj.magic 0.0; >> ... >> >> where the host field has declared type string. Really? >> > > That code is generated by atdgen. What happens is that we have to either > create an empty record when starting to parse a list of unordered JSON > fields, or use a bunch `let = ref None in` for each field and > create the record in the end. While the latter approach is not much more > work to implement, the resulting code was found to be significantly slower. > > The reason why it's using `Obj.magic 0.0` is that it worked in all cases > (and has been for the past 4 years). Obtaining a well-formed constant value > for any type is not trivial, so this what we have. > > It's very possible that it's now broken with OCaml 4.02. First try a 'make > test' from atdgen's source directory (https://github.com/mjambon/atdgen) > and see if it passes. > > > Martin > > > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa.inria.fr/sympa/arc/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >