| (* RUN: %ocamlopt -warn-error A unix.cmxa llvm.cmxa llvm_bitwriter.cmxa %s -o %t |
| * RUN: %t %t.bc |
| * RUN: llvm-dis < %t.bc | grep caml_int_ty |
| * XFAIL: vg_leak |
| *) |
| |
| (* Note that this takes a moment to link, so it's best to keep the number of |
| individual tests low. *) |
| |
| let context = Llvm.global_context () |
| |
| let test x = if not x then exit 1 else () |
| |
| let read_file name = |
| let ic = open_in_bin name in |
| let len = in_channel_length ic in |
| let buf = String.create len in |
| |
| test ((input ic buf 0 len) = len); |
| |
| close_in ic; |
| |
| buf |
| |
| let temp_bitcode ?unbuffered m = |
| let temp_name, temp_oc = Filename.open_temp_file ~mode:[Open_binary] "" "" in |
| |
| test (Llvm_bitwriter.output_bitcode ?unbuffered temp_oc m); |
| flush temp_oc; |
| |
| let temp_buf = read_file temp_name in |
| |
| close_out temp_oc; |
| |
| temp_buf |
| |
| let _ = |
| let m = Llvm.create_module context "ocaml_test_module" in |
| |
| ignore (Llvm.define_type_name "caml_int_ty" (Llvm.i32_type context) m); |
| |
| test (Llvm_bitwriter.write_bitcode_file m Sys.argv.(1)); |
| let file_buf = read_file Sys.argv.(1) in |
| |
| test (file_buf = temp_bitcode m); |
| test (file_buf = temp_bitcode ~unbuffered:false m); |
| test (file_buf = temp_bitcode ~unbuffered:true m) |