mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
b99ed0163e
LLVMGetInitializer returns nullptr in case there is no initializer. There is not much that can be done with nullptr in OCaml, not even test if it is null. Also, there does not seem to be a C or OCaml API to test if there is an initializer. So this diff changes Llvm.global_initializer to return an option. Reviewed By: whitequark Differential Revision: https://reviews.llvm.org/D65195
60 lines
1.5 KiB
OCaml
60 lines
1.5 KiB
OCaml
(* RUN: rm -rf %t && mkdir -p %t && cp %s %t/irreader.ml
|
|
* RUN: %ocamlc -g -w +A -package llvm.irreader -linkpkg %t/irreader.ml -o %t/executable
|
|
* RUN: %t/executable
|
|
* RUN: %ocamlopt -g -w +A -package llvm.irreader -linkpkg %t/irreader.ml -o %t/executable
|
|
* RUN: %t/executable
|
|
* XFAIL: vg_leak
|
|
*)
|
|
|
|
(* Note: It takes several seconds for ocamlopt to link an executable with
|
|
libLLVMCore.a, so it's better to write a big test than a bunch of
|
|
little ones. *)
|
|
|
|
open Llvm
|
|
open Llvm_irreader
|
|
|
|
let context = global_context ()
|
|
|
|
(* Tiny unit test framework - really just to help find which line is busted *)
|
|
let print_checkpoints = false
|
|
|
|
let suite name f =
|
|
if print_checkpoints then
|
|
prerr_endline (name ^ ":");
|
|
f ()
|
|
|
|
let _ =
|
|
Printexc.record_backtrace true
|
|
|
|
let insist cond =
|
|
if not cond then failwith "insist"
|
|
|
|
|
|
(*===-- IR Reader ---------------------------------------------------------===*)
|
|
|
|
let test_irreader () =
|
|
begin
|
|
let buf = MemoryBuffer.of_string "@foo = global i32 42" in
|
|
let m = parse_ir context buf in
|
|
match lookup_global "foo" m with
|
|
| Some foo ->
|
|
insist ((global_initializer foo) = (Some (const_int (i32_type context) 42)))
|
|
| None ->
|
|
failwith "global"
|
|
end;
|
|
|
|
begin
|
|
let buf = MemoryBuffer.of_string "@foo = global garble" in
|
|
try
|
|
ignore (parse_ir context buf);
|
|
failwith "parsed"
|
|
with Llvm_irreader.Error _ ->
|
|
()
|
|
end
|
|
|
|
|
|
(*===-- Driver ------------------------------------------------------------===*)
|
|
|
|
let _ =
|
|
suite "irreader" test_irreader
|