[LLVMdev] Tag number of OCaml Variant in executionengine

Jianzhou Zhao
Sun, 28 Feb 2010 16:38:11 -0000

Hi,

At the code below from
./bindings/ocaml/executionengine/executionengine_ocaml.c,
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.

Zjz

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 }