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