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