xref: /llvm-project/llvm/test/Bindings/OCaml/irreader.ml (revision 2571a0936719b50facfee492ccbaf4916272be36)
117ee427eSKuba Mracek(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/irreader.ml
217ee427eSKuba Mracek * RUN: %ocamlc -g -w +A -package llvm.irreader -linkpkg %t/irreader.ml -o %t/executable
317ee427eSKuba Mracek * RUN: %t/executable
417ee427eSKuba Mracek * RUN: %ocamlopt -g -w +A -package llvm.irreader -linkpkg %t/irreader.ml -o %t/executable
517ee427eSKuba Mracek * RUN: %t/executable
6e2b8b143SPeter Zotov * XFAIL: vg_leak
7e2b8b143SPeter Zotov *)
8e2b8b143SPeter Zotov
9e2b8b143SPeter Zotov(* Note: It takes several seconds for ocamlopt to link an executable with
10e2b8b143SPeter Zotov         libLLVMCore.a, so it's better to write a big test than a bunch of
11e2b8b143SPeter Zotov         little ones. *)
12e2b8b143SPeter Zotov
13e2b8b143SPeter Zotovopen Llvm
14e2b8b143SPeter Zotovopen Llvm_irreader
15e2b8b143SPeter Zotov
16e2b8b143SPeter Zotovlet context = global_context ()
17e2b8b143SPeter Zotov
18e2b8b143SPeter Zotov(* Tiny unit test framework - really just to help find which line is busted *)
19e2b8b143SPeter Zotovlet print_checkpoints = false
20e2b8b143SPeter Zotov
21e2b8b143SPeter Zotovlet suite name f =
22e2b8b143SPeter Zotov  if print_checkpoints then
23e2b8b143SPeter Zotov    prerr_endline (name ^ ":");
24e2b8b143SPeter Zotov  f ()
25e2b8b143SPeter Zotov
26e2b8b143SPeter Zotovlet _ =
27e2b8b143SPeter Zotov  Printexc.record_backtrace true
28e2b8b143SPeter Zotov
29e2b8b143SPeter Zotovlet insist cond =
30e2b8b143SPeter Zotov  if not cond then failwith "insist"
31e2b8b143SPeter Zotov
32e2b8b143SPeter Zotov
33e2b8b143SPeter Zotov(*===-- IR Reader ---------------------------------------------------------===*)
34e2b8b143SPeter Zotov
35e2b8b143SPeter Zotovlet test_irreader () =
36e2b8b143SPeter Zotov  begin
37e2b8b143SPeter Zotov    let buf = MemoryBuffer.of_string "@foo = global i32 42" in
38e2b8b143SPeter Zotov    let m   = parse_ir context buf in
39e2b8b143SPeter Zotov    match lookup_global "foo" m with
40e2b8b143SPeter Zotov    | Some foo ->
41*2571a093STimotej Kapus        insist ((global_initializer foo) = (Some (const_int (i32_type context) 42)))
42e2b8b143SPeter Zotov    | None ->
43e2b8b143SPeter Zotov        failwith "global"
44e2b8b143SPeter Zotov  end;
45e2b8b143SPeter Zotov
46e2b8b143SPeter Zotov  begin
47e2b8b143SPeter Zotov    let buf = MemoryBuffer.of_string "@foo = global garble" in
48e2b8b143SPeter Zotov    try
49e2b8b143SPeter Zotov      ignore (parse_ir context buf);
50e2b8b143SPeter Zotov      failwith "parsed"
51e2b8b143SPeter Zotov    with Llvm_irreader.Error _ ->
52e2b8b143SPeter Zotov      ()
53e2b8b143SPeter Zotov  end
54e2b8b143SPeter Zotov
55e2b8b143SPeter Zotov
56e2b8b143SPeter Zotov(*===-- Driver ------------------------------------------------------------===*)
57e2b8b143SPeter Zotov
58e2b8b143SPeter Zotovlet _ =
59e2b8b143SPeter Zotov  suite "irreader" test_irreader
60