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