84 lines · plain
1(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/bitreader.ml2 * RUN: %ocamlc -g -w +A -package llvm.bitreader -package llvm.bitwriter -linkpkg %t/bitreader.ml -o %t/executable3 * RUN: %t/executable %t/bitcode.bc4 * RUN: %ocamlopt -g -w +A -package llvm.bitreader -package llvm.bitwriter -linkpkg %t/bitreader.ml -o %t/executable5 * RUN: %t/executable %t/bitcode.bc6 * RUN: llvm-dis < %t/bitcode.bc7 * XFAIL: vg_leak8 *)9 10(* Note that this takes a moment to link, so it's best to keep the number of11 individual tests low. *)12 13let context = Llvm.global_context ()14 15let diagnostic_handler _ = ()16 17let test x = if not x then exit 1 else ()18 19let _ =20 Llvm.set_diagnostic_handler context (Some diagnostic_handler);21 22 let fn = Sys.argv.(1) in23 let m = Llvm.create_module context "ocaml_test_module" in24 25 test (Llvm_bitwriter.write_bitcode_file m fn);26 27 Llvm.dispose_module m;28 29 (* parse_bitcode *)30 begin31 let mb = Llvm.MemoryBuffer.of_file fn in32 begin try33 let m = Llvm_bitreader.parse_bitcode context mb in34 Llvm.dispose_module m35 with x ->36 Llvm.MemoryBuffer.dispose mb;37 raise x38 end39 end;40 41 (* MemoryBuffer.of_file *)42 test begin try43 let mb = Llvm.MemoryBuffer.of_file (fn ^ ".bogus") in44 Llvm.MemoryBuffer.dispose mb;45 false46 with Llvm.IoError _ ->47 true48 end;49 50 (* get_module *)51 begin52 let mb = Llvm.MemoryBuffer.of_file fn in53 let m = begin try54 Llvm_bitreader.get_module context mb55 with x ->56 Llvm.MemoryBuffer.dispose mb;57 raise x58 end in59 Llvm.dispose_module m60 end;61 62 (* corrupt the bitcode *)63 let fn = fn ^ ".txt" in64 begin let oc = open_out fn in65 output_string oc "not a bitcode file\n";66 close_out oc67 end;68 69 (* test get_module exceptions *)70 test begin71 try72 let mb = Llvm.MemoryBuffer.of_file fn in73 let m = begin try74 Llvm_bitreader.get_module context mb75 with x ->76 Llvm.MemoryBuffer.dispose mb;77 raise x78 end in79 Llvm.dispose_module m;80 false81 with Llvm_bitreader.Error _ ->82 true83 end84