Tag number of OCaml Variant in executionengine


At the code below from
we create an OCaml Variant from C. It is from 2.6, the latest 2.7 has
the same code.

Line 240 Option = alloc(1, 1) assigns tag1 to the 'some' constructor.
In term of http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html,
I think the 'some' should have a tag 0. We dont have a runtime error
for this, the reason might be there is only two constructors, one
is None represented as unboxed int, the other is Some represented
as a tagged block, and OCaml runtime may only distinguish them
as the structures, but not the tag number.


233 /* string -> ExecutionEngine.t -> llvalue option */
234 CAMLprim value llvm_ee_find_function(value Name,
LLVMExecutionEngineRef EE) {
235 CAMLparam1(Name);
236 CAMLlocal1(Option);
237 LLVMValueRef Found;
238 if (LLVMFindFunction(EE, String_val(Name), &Found))
239 CAMLreturn(Val_unit);
240 Option = alloc(1, 1);
241 Field(Option, 0) = Val_op(Found);
242 CAMLreturn(Option);
243 }

Sounds reasonable. I'll make the change to make things more
consistent. Also, I see that we aren't properly protecting our option
values against the GC in a couple places. I'll make those changes too.


Another quick question.
In ./bindings/ocaml/Makefile.ocaml, the configurations when
ENABLE_OPTIMIZED<>1 are commented, which set -g flag to $(OCAMLC).
Is that for back-compatibility to support OCaml < 3.10.0?

At the time, we were still supporting 3.09. It sounds like everyone's
updated to 3.11 though, so it may be worth enabling it. Would anyone
have any complaints if I did?

I am always using the lastest OCaml. But I also have older OCaml
installed if any tool has to use an old version.

BTW: Does the current OCaml binding do native compilation? It seems
to me that they are compiled by 'ocamlc' but not 'ocamlopt'. Is there any
problem if we support native compilation? Thanks.

Yes it does, it should be compiling both .cmas and .cmxas. Do you not
have any in your Debug/lib/ocaml, or Release/lib/ocaml? Perhaps
configure failed to find ocamlopt or ocamlopt.opt? What os are you on?