xref: /llvm-project/llvm/test/Bindings/OCaml/analysis.ml (revision 17ee427ef35d7521f90f28a7db83fddb4aadd475)
1*17ee427eSKuba Mracek(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/analysis.ml
2*17ee427eSKuba Mracek * RUN: %ocamlc -g -w +A -package llvm.analysis -linkpkg %t/analysis.ml -o %t/executable
3*17ee427eSKuba Mracek * RUN: %t/executable
4*17ee427eSKuba Mracek * RUN: %ocamlopt -g -w +A -package llvm.analysis -linkpkg %t/analysis.ml -o %t/executable
5*17ee427eSKuba Mracek * RUN: %t/executable
6e2b8b143SPeter Zotov * XFAIL: vg_leak
7e2b8b143SPeter Zotov *)
8e2b8b143SPeter Zotov
9e2b8b143SPeter Zotovopen Llvm
10e2b8b143SPeter Zotovopen Llvm_analysis
11e2b8b143SPeter Zotov
12e2b8b143SPeter Zotov(* Note that this takes a moment to link, so it's best to keep the number of
13e2b8b143SPeter Zotov   individual tests low. *)
14e2b8b143SPeter Zotov
15e2b8b143SPeter Zotovlet context = global_context ()
16e2b8b143SPeter Zotov
17e2b8b143SPeter Zotovlet test x = if not x then exit 1 else ()
18e2b8b143SPeter Zotov
19e2b8b143SPeter Zotovlet bomb msg =
20e2b8b143SPeter Zotov  prerr_endline msg;
21e2b8b143SPeter Zotov  exit 2
22e2b8b143SPeter Zotov
23e2b8b143SPeter Zotovlet _ =
24e2b8b143SPeter Zotov  let fty = function_type (void_type context) [| |] in
25e2b8b143SPeter Zotov  let m = create_module context "valid_m" in
26e2b8b143SPeter Zotov  let fn = define_function "valid_fn" fty m in
27e2b8b143SPeter Zotov  let at_entry = builder_at_end context (entry_block fn) in
28e2b8b143SPeter Zotov  ignore (build_ret_void at_entry);
29e2b8b143SPeter Zotov
30e2b8b143SPeter Zotov
31e2b8b143SPeter Zotov  (* Test that valid constructs verify. *)
32e2b8b143SPeter Zotov  begin match verify_module m with
33e2b8b143SPeter Zotov    Some msg -> bomb "valid module failed verification!"
34e2b8b143SPeter Zotov  | None -> ()
35e2b8b143SPeter Zotov  end;
36e2b8b143SPeter Zotov
37e2b8b143SPeter Zotov  if not (verify_function fn) then bomb "valid function failed verification!";
38e2b8b143SPeter Zotov
39e2b8b143SPeter Zotov
40e2b8b143SPeter Zotov  (* Test that invalid constructs do not verify.
41e2b8b143SPeter Zotov     A basic block can contain only one terminator instruction. *)
42e2b8b143SPeter Zotov  ignore (build_ret_void at_entry);
43e2b8b143SPeter Zotov
44e2b8b143SPeter Zotov  begin match verify_module m with
45e2b8b143SPeter Zotov    Some msg -> ()
46e2b8b143SPeter Zotov  | None -> bomb "invalid module passed verification!"
47e2b8b143SPeter Zotov  end;
48e2b8b143SPeter Zotov
49e2b8b143SPeter Zotov  if verify_function fn then bomb "invalid function passed verification!";
50e2b8b143SPeter Zotov
51e2b8b143SPeter Zotov
52e2b8b143SPeter Zotov  dispose_module m
53e2b8b143SPeter Zotov
54e2b8b143SPeter Zotov  (* Don't bother to test assert_valid_{module,function}. *)
55