[OCaml] Expose Llvm_bitwriter.write_bitcode_to_memory_buffer.
[oota-llvm.git] / test / Bindings / Ocaml / bitreader.ml
1 (* RUN: rm -rf %t.builddir
2  * RUN: mkdir -p %t.builddir
3  * RUN: cp %s %t.builddir
4  * RUN: %ocamlcomp -warn-error A llvm.%cma llvm_bitreader.%cma llvm_bitwriter.%cma %t.builddir/bitreader.ml -o %t
5  * RUN: %t %t.bc
6  * RUN: llvm-dis < %t.bc
7  * XFAIL: vg_leak
8  *)
9
10 (* Note that this takes a moment to link, so it's best to keep the number of
11    individual tests low. *)
12
13 let context = Llvm.global_context ()
14
15 let test x = if not x then exit 1 else ()
16
17 let _ =
18   let fn = Sys.argv.(1) in
19   let m = Llvm.create_module context "ocaml_test_module" in
20
21   test (Llvm_bitwriter.write_bitcode_file m fn);
22
23   Llvm.dispose_module m;
24
25   (* parse_bitcode *)
26   begin
27     let mb = Llvm.MemoryBuffer.of_file fn in
28     begin try
29       let m = Llvm_bitreader.parse_bitcode context mb in
30       Llvm.dispose_module m
31     with x ->
32       Llvm.MemoryBuffer.dispose mb;
33       raise x
34     end
35   end;
36
37   (* MemoryBuffer.of_file *)
38   test begin try
39     let mb = Llvm.MemoryBuffer.of_file (fn ^ ".bogus") in
40     Llvm.MemoryBuffer.dispose mb;
41     false
42   with Llvm.IoError _ ->
43     true
44   end;
45
46   (* get_module *)
47   begin
48     let mb = Llvm.MemoryBuffer.of_file fn in
49     let m = begin try
50       Llvm_bitreader.get_module context mb
51     with x ->
52       Llvm.MemoryBuffer.dispose mb;
53       raise x
54     end in
55     Llvm.dispose_module m
56   end;
57
58   (* corrupt the bitcode *)
59   let fn = fn ^ ".txt" in
60   begin let oc = open_out fn in
61     output_string oc "not a bitcode file\n";
62     close_out oc
63   end;
64
65   (* test get_module exceptions *)
66   test begin
67     try
68       let mb = Llvm.MemoryBuffer.of_file fn in
69       let m = begin try
70         Llvm_bitreader.get_module context mb
71       with x ->
72         Llvm.MemoryBuffer.dispose mb;
73         raise x
74       end in
75       Llvm.dispose_module m;
76       false
77     with Llvm_bitreader.Error _ ->
78       true
79   end