10a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar(* RUN: rm -rf %t.builddir 20a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: mkdir -p %t.builddir 30a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: cp %s %t.builddir 40a248bf714f18b1cdcda5d7b811303c232d6e885Daniel Dunbar * RUN: %ocamlopt -warn-error A llvm.cmxa llvm_bitreader.cmxa llvm_bitwriter.cmxa %t.builddir/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 20bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 21bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen test (Llvm_bitwriter.write_bitcode_file m fn); 22bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 23bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen Llvm.dispose_module m; 24bbc6597f02d108f32b5bdc7711cc67386196017bGordon Henriksen 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; 36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 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; 45da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 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; 57da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 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; 64da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 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