brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · 6375be8 Raw
66 lines · plain
1(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/linker.ml2 * RUN: %ocamlc -g -w +A -package llvm.linker -linkpkg %t/linker.ml -o %t/executable3 * RUN: %t/executable4 * RUN: %ocamlopt -g -w +A -package llvm.linker -linkpkg %t/linker.ml -o %t/executable5 * RUN: %t/executable6 * XFAIL: vg_leak7 *)8 9(* Note: It takes several seconds for ocamlopt to link an executable with10         libLLVMCore.a, so it's better to write a big test than a bunch of11         little ones. *)12 13open Llvm14open Llvm_linker15 16let context = global_context ()17let void_type = Llvm.void_type context18 19let diagnostic_handler _ = ()20 21(* Tiny unit test framework - really just to help find which line is busted *)22let print_checkpoints = false23 24let suite name f =25  if print_checkpoints then26    prerr_endline (name ^ ":");27  f ()28 29 30(*===-- Linker -----------------------------------------------------------===*)31 32let test_linker () =33  set_diagnostic_handler context (Some diagnostic_handler);34 35  let fty = function_type void_type [| |] in36 37  let make_module name =38    let m = create_module context name in39    let fn = define_function ("fn_" ^ name) fty m in40    ignore (build_ret_void (builder_at_end context (entry_block fn)));41    m42  in43 44  let m1 = make_module "one"45  and m2 = make_module "two" in46  link_modules m1 m2;47  dispose_module m1;48 49  let m1 = make_module "one"50  and m2 = make_module "two" in51  link_modules m1 m2;52  dispose_module m1;53 54  let m1 = make_module "one"55  and m2 = make_module "one" in56  try57    link_modules m1 m2;58    failwith "must raise"59  with Error _ ->60    dispose_module m161 62(*===-- Driver ------------------------------------------------------------===*)63 64let _ =65  suite "linker" test_linker66