Home | History | Annotate | Download | only in Ocaml
      1 (* RUN: %ocamlopt -warn-error A unix.cmxa llvm.cmxa llvm_bitwriter.cmxa %s -o %t
      2  * RUN: %t %t.bc
      3  * RUN: llvm-dis < %t.bc
      4  * XFAIL: vg_leak
      5  *)
      6 
      7 (* Note that this takes a moment to link, so it's best to keep the number of
      8    individual tests low. *)
      9 
     10 let context = Llvm.global_context ()
     11 
     12 let test x = if not x then exit 1 else ()
     13 
     14 let read_file name =
     15   let ic = open_in_bin name in
     16   let len = in_channel_length ic in
     17   let buf = String.create len in
     18 
     19   test ((input ic buf 0 len) = len);
     20 
     21   close_in ic;
     22 
     23   buf
     24 
     25 let temp_bitcode ?unbuffered m =
     26   let temp_name, temp_oc = Filename.open_temp_file ~mode:[Open_binary] "" "" in
     27 
     28   test (Llvm_bitwriter.output_bitcode ?unbuffered temp_oc m);
     29   flush temp_oc;
     30 
     31   let temp_buf = read_file temp_name in
     32 
     33   close_out temp_oc;
     34 
     35   temp_buf
     36 
     37 let _ =
     38   let m = Llvm.create_module context "ocaml_test_module" in
     39   
     40   test (Llvm_bitwriter.write_bitcode_file m Sys.argv.(1));
     41   let file_buf = read_file Sys.argv.(1) in
     42 
     43   test (file_buf = temp_bitcode m);
     44   test (file_buf = temp_bitcode ~unbuffered:false m);
     45   test (file_buf = temp_bitcode ~unbuffered:true m)
     46