(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/executionengine.ml
 * RUN: %ocamlc -g -w +A -package llvm.executionengine -linkpkg %t/executionengine.ml -o %t/executable
 * RUN: %t/executable
 * RUN: %ocamlopt -g -w +A -package llvm.executionengine -linkpkg %t/executionengine.ml -o %t/executable
 * RUN: %t/executable
 * REQUIRES: native, object-emission
 * XFAIL: vg_leak
 *)

open Llvm
open Llvm_executionengine
open Llvm_target

(* Note that this takes a moment to link, so it's best to keep the number of
   individual tests low. *)

let context = global_context ()
let i8_type = Llvm.i8_type context
let i32_type = Llvm.i32_type context
let i64_type = Llvm.i64_type context
let double_type = Llvm.double_type context

let () =
  assert (Llvm_executionengine.initialize ())

let bomb msg =
  prerr_endline msg;
  exit 2

let define_getglobal m pg =
  let fn = define_function "getglobal" (function_type i32_type [||]) m in
  let b = builder_at_end (global_context ()) (entry_block fn) in
  let g = build_call pg [||] "" b in
  ignore (build_ret g b);
  fn

let define_plus m =
  let fn = define_function "plus" (function_type i32_type [| i32_type;
                                                             i32_type |]) m in
  let b = builder_at_end (global_context ()) (entry_block fn) in
  let add = build_add (param fn 0) (param fn 1) "sum" b in
  ignore (build_ret add b);
  fn

let test_executionengine () =
  let open Ctypes in

  (* create *)
  let m = create_module (global_context ()) "test_module" in
  let ee = create m in

  (* add plus *)
  ignore (define_plus m);

  (* declare global variable *)
  ignore (define_global "globvar" (const_int i32_type 23) m);

  (* add module *)
  let m2 = create_module (global_context ()) "test_module2" in
  add_module m2 ee;

  (* add global mapping *)
  (* BROKEN: see PR20656 *)
  (* let g = declare_function "g" (function_type i32_type [||]) m2 in
  let cg = coerce (Foreign.funptr (void @-> returning int32_t)) (ptr void)
                                  (fun () -> 42l) in
  add_global_mapping g cg ee;

  (* check g *)
  let cg' = get_pointer_to_global g (ptr void) ee in
  if 0 <> ptr_compare cg cg' then bomb "int pointers to g differ";

  (* add getglobal *)
  let getglobal = define_getglobal m2 g in*)

  (* run_static_ctors *)
  run_static_ctors ee;

  (* get a handle on globvar *)
  let varh    = get_global_value_address "globvar" int32_t ee in
  if 23l <> varh then bomb "get_global_value_address didn't work";

  (* call plus *)
  let cplusty = Foreign.funptr (int32_t @-> int32_t @-> returning int32_t) in
  let cplus   = get_function_address "plus" cplusty ee in
  if 4l <> cplus 2l 2l then bomb "plus didn't work";

  (* call getglobal *)
  (* let cgetglobalty = Foreign.funptr (void @-> returning int32_t) in
  let cgetglobal   = get_pointer_to_global getglobal cgetglobalty ee in
  if 42l <> cgetglobal () then bomb "getglobal didn't work"; *)

  (* remove_module *)
  remove_module m2 ee;
  dispose_module m2;

  (* run_static_dtors *)
  run_static_dtors ee;

  (* Show that the data layout binding links and runs.*)
  let dl = data_layout ee in

  (* Demonstrate that a garbage pointer wasn't returned. *)
  let ty = DataLayout.intptr_type context dl in
  if ty != i32_type && ty != i64_type then bomb "target_data did not work";

  (* dispose *)
  dispose ee

let () =
  test_executionengine ();
  Gc.compact ()
