137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines(* RUN: cp %s %T/bitreader.ml 237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %ocamlc -g -warn-error A -package llvm.bitreader -package llvm.bitwriter -linkpkg %T/bitreader.ml -o %t 337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %t %t.bc 437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines * RUN: %ocamlopt -g -warn-error A -package llvm.bitreader -package llvm.bitwriter -linkpkg %T/bitreader.ml -o %t 52a7d731828ab87bba42f7ecac8db509646cd2cddBob Wilson * RUN: %t %t.bc 6b4f6095bae5edfe9d6cabfe4802e6f6187e073f2Nick Lewycky * RUN: llvm-dis < %t.bc 7874f021bc16aaf4619fd818da150f1b63e408c80Daniel Dunbar * XFAIL: vg_leak 8bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen *) 9bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 10bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen(* Note that this takes a moment to link, so it's best to keep the number of 11bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen individual tests low. *) 12bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 135371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaarlet context = Llvm.global_context () 145371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar 15bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksenlet test x = if not x then exit 1 else () 16bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 17bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksenlet _ = 18bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen let fn = Sys.argv.(1) in 195371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar let m = Llvm.create_module context "ocaml_test_module" in 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 21bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen test (Llvm_bitwriter.write_bitcode_file m fn); 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 23bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen Llvm.dispose_module m; 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 25da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen (* parse_bitcode *) 26da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen begin 27da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen let mb = Llvm.MemoryBuffer.of_file fn in 28da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen begin try 295371aa2a1c9a4eeecffdb9ab7b2175732e49475bErick Tryzelaar let m = Llvm_bitreader.parse_bitcode context mb in 30da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen Llvm.dispose_module m 31da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen with x -> 327a653cb24d4dda283d34c984e81514ac1547796eGordon Henriksen Llvm.MemoryBuffer.dispose mb; 33da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise x 34da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end 35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end; 3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen (* MemoryBuffer.of_file *) 38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen test begin try 39da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen let mb = Llvm.MemoryBuffer.of_file (fn ^ ".bogus") in 40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen Llvm.MemoryBuffer.dispose mb; 41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen false 42da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen with Llvm.IoError _ -> 43da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen true 44da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end; 4537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4616609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar (* get_module *) 47da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen begin 48da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen let mb = Llvm.MemoryBuffer.of_file fn in 4916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar let m = begin try 5016609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar Llvm_bitreader.get_module context mb 51da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen with x -> 52da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen Llvm.MemoryBuffer.dispose mb; 53da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise x 54da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end in 5516609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar Llvm.dispose_module m 56da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end; 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 58da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen (* corrupt the bitcode *) 59da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen let fn = fn ^ ".txt" in 60da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen begin let oc = open_out fn in 61da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen output_string oc "not a bitcode file\n"; 62da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen close_out oc 63da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end; 6437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 6516609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar (* test get_module exceptions *) 66da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen test begin 67da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen try 68da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen let mb = Llvm.MemoryBuffer.of_file fn in 6916609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar let m = begin try 7016609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar Llvm_bitreader.get_module context mb 71da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen with x -> 72da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen Llvm.MemoryBuffer.dispose mb; 73da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen raise x 74da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end in 7516609f3c5c26ba34603ae0d7ebab86fb11a72722Erick Tryzelaar Llvm.dispose_module m; 76da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen false 77da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen with Llvm_bitreader.Error _ -> 78da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen true 79da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen end 80