137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(* RUN: cp %s %T/bitwriter.ml
2cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar * RUN: %ocamlc -g -w -3 -w +A -package llvm.bitreader -package llvm.bitwriter -linkpkg %T/bitwriter.ml -o %t
337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %t %t.bc
4cddc3e03e4ec99c0268c03a126195173e519ed58Pirama Arumuga Nainar * RUN: %ocamlopt -g -w -3 -w +A -package llvm.bitreader -package llvm.bitwriter -linkpkg %T/bitwriter.ml -o %t
52a7d731828ab87bba42f7ecac8db509646cd2cddBob Wilson * RUN: %t %t.bc
6b4f6095bae5edfe9d6cabfe4802e6f6187e073f2Nick Lewycky * RUN: llvm-dis < %t.bc
7874f021bc16aaf4619fd818da150f1b63e408c80Daniel Dunbar * XFAIL: vg_leak
88ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen *)
98ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
108ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen(* Note that this takes a moment to link, so it's best to keep the number of
118ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen   individual tests low. *)
128ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
13b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaarlet context = Llvm.global_context ()
14b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar
158ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenlet test x = if not x then exit 1 else ()
168ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksen
17e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaarlet read_file name =
18e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let ic = open_in_bin name in
19e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let len = in_channel_length ic in
20e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let buf = String.create len in
21e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
22e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  test ((input ic buf 0 len) = len);
23e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
24e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  close_in ic;
25e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
26e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  buf
27e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
28e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaarlet temp_bitcode ?unbuffered m =
29e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let temp_name, temp_oc = Filename.open_temp_file ~mode:[Open_binary] "" "" in
30e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
31e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  test (Llvm_bitwriter.output_bitcode ?unbuffered temp_oc m);
32e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  flush temp_oc;
33e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
34e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let temp_buf = read_file temp_name in
35e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
36e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  close_out temp_oc;
37e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
38e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  temp_buf
39e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
408ef426baa36639458f6777309db25c1768dc9c8aGordon Henriksenlet _ =
41b02b87882788e57e180c6b903a37ced0db1ce828Erick Tryzelaar  let m = Llvm.create_module context "ocaml_test_module" in
4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines
43e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  test (Llvm_bitwriter.write_bitcode_file m Sys.argv.(1));
44e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  let file_buf = read_file Sys.argv.(1) in
45e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar
46e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  test (file_buf = temp_bitcode m);
47e623050048e56a512e77c28b69925e7dc1efa6adErick Tryzelaar  test (file_buf = temp_bitcode ~unbuffered:false m);
4837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  test (file_buf = temp_bitcode ~unbuffered:true m);
4937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines  test (file_buf = Llvm.MemoryBuffer.as_string (Llvm_bitwriter.write_bitcode_to_memory_buffer m))
50