brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 2638ca9 Raw
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