Index: bindings/ocaml/llvm/llvm.ml =================================================================== --- bindings/ocaml/llvm/llvm.ml +++ bindings/ocaml/llvm/llvm.ml @@ -710,7 +710,7 @@ external lookup_global : string -> llmodule -> llvalue option = "llvm_lookup_global" external delete_global : llvalue -> unit = "llvm_delete_global" -external global_initializer : llvalue -> llvalue = "LLVMGetInitializer" +external global_initializer : llvalue -> llvalue option = "llvm_global_initializer" external set_initializer : llvalue -> llvalue -> unit = "llvm_set_initializer" external remove_initializer : llvalue -> unit = "llvm_remove_initializer" external is_thread_local : llvalue -> bool = "llvm_is_thread_local" Index: bindings/ocaml/llvm/llvm.mli =================================================================== --- bindings/ocaml/llvm/llvm.mli +++ bindings/ocaml/llvm/llvm.mli @@ -1454,9 +1454,9 @@ See the method [llvm::GlobalVariable::setConstant]. *) val set_global_constant : bool -> llvalue -> unit -(** [global_initializer gv] returns the initializer for the global variable - [gv]. See the method [llvm::GlobalVariable::getInitializer]. *) -val global_initializer : llvalue -> llvalue +(** [global_initializer gv] If global variable [gv] has an initializer it is returned, + otherwise returns [None]. See the method [llvm::GlobalVariable::getInitializer]. *) +val global_initializer : llvalue -> llvalue option (** [set_initializer c gv] sets the initializer for the global variable [gv] to the constant [c]. Index: bindings/ocaml/llvm/llvm_ocaml.c =================================================================== --- bindings/ocaml/llvm/llvm_ocaml.c +++ bindings/ocaml/llvm/llvm_ocaml.c @@ -1261,6 +1261,18 @@ return Val_unit; } +/* llvalue -> llvalue option */ +CAMLprim value llvm_global_initializer(LLVMValueRef GlobalVar) { + CAMLparam0(); + LLVMValueRef Init; + if ((Init = LLVMGetInitializer(GlobalVar))) { + value Option = alloc(1, 0); + Field(Option, 0) = (value) Init; + CAMLreturn(Option); + } + CAMLreturn(Val_int(0)); +} + /* llvalue -> llvalue -> unit */ CAMLprim value llvm_set_initializer(LLVMValueRef ConstantVal, LLVMValueRef GlobalVar) {