(* RUN: %ocamlopt -warn-error A llvm.cmxa llvm_target.cmxa %s -o %t
 * RUN: %t %t.bc
 * XFAIL: vg_leak
 *)

(* Note: It takes several seconds for ocamlopt to link an executable with
         libLLVMCore.a, so it's better to write a big test than a bunch of
         little ones. *)

open Llvm
open Llvm_target


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

(* Tiny unit test framework - really just to help find which line is busted *)
let print_checkpoints = false

let suite name f =
  if print_checkpoints then
    prerr_endline (name ^ ":");
  f ()


(*===-- Fixture -----------------------------------------------------------===*)

let filename = Sys.argv.(1)
let m = create_module context filename


(*===-- Target Data -------------------------------------------------------===*)

let test_target_data () =
  let td = TargetData.create (target_triple m) in
  let sty = struct_type context [| i32_type; i64_type |] in
  
  ignore (TargetData.as_string td);
  ignore (TargetData.invalidate_struct_layout td sty);
  ignore (byte_order td);
  ignore (pointer_size td);
  ignore (intptr_type td);
  ignore (size_in_bits td sty);
  ignore (store_size td sty);
  ignore (abi_size td sty);
  ignore (stack_align td sty);
  ignore (preferred_align td sty);
  ignore (preferred_align_of_global td (declare_global sty "g" m));
  ignore (element_at_offset td sty (Int64.of_int 1));
  ignore (offset_of_element td sty 1);
  
  TargetData.dispose td


(*===-- Driver ------------------------------------------------------------===*)

let _ =
  suite "target data" test_target_data;
  dispose_module m
