Commit 27bbb819 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Revert 224782: "Finish removing DestroySource."

Filip Pizlo pointed out that this changes the C API.

It's too late in the release process to figure out how we want to
handle this. Reverting the patch is essentially a way of buying time:
we don't change the API at the source level for now, we're not
trying to fix it with a last-minute patch with a risk of unintended
effects, and we preserve our options for fixing this in 3.6.1.

This is not ideal, but I think it's the best compromise at this stage.

llvm-svn: 230431
parent 53811080
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -20,9 +20,16 @@ package llvm
import "C"
import "errors"

func LinkModules(Dest, Src Module) error {
type LinkerMode C.LLVMLinkerMode

const (
	LinkerDestroySource  = C.LLVMLinkerDestroySource
	LinkerPreserveSource = C.LLVMLinkerPreserveSource
)

func LinkModules(Dest, Src Module, Mode LinkerMode) error {
	var cmsg *C.char
	failed := C.LLVMLinkModules(Dest.C, Src.C, 0, &cmsg)
	failed := C.LLVMLinkModules(Dest.C, Src.C, C.LLVMLinkerMode(Mode), &cmsg)
	if failed != 0 {
		err := errors.New(C.GoString(cmsg))
		C.LLVMDisposeMessage(cmsg)
+3 −3
Original line number Diff line number Diff line
@@ -23,11 +23,11 @@

void llvm_raise(value Prototype, char *Message);

/* llmodule -> llmodule -> unit */
CAMLprim value llvm_link_modules(LLVMModuleRef Dst, LLVMModuleRef Src) {
/* llmodule -> llmodule -> Mode.t -> unit */
CAMLprim value llvm_link_modules(LLVMModuleRef Dst, LLVMModuleRef Src, value Mode) {
  char* Message;

  if (LLVMLinkModules(Dst, Src, 0, &Message))
  if (LLVMLinkModules(Dst, Src, Int_val(Mode), &Message))
    llvm_raise(*caml_named_value("Llvm_linker.Error"), Message);

  return Val_unit;
+7 −1
Original line number Diff line number Diff line
@@ -11,5 +11,11 @@ exception Error of string

let () = Callback.register_exception "Llvm_linker.Error" (Error "")

external link_modules : Llvm.llmodule -> Llvm.llmodule -> unit
module Mode = struct
  type t =
  | DestroySource
  | PreserveSource
end

external link_modules : Llvm.llmodule -> Llvm.llmodule -> Mode.t -> unit
                      = "llvm_link_modules"
+8 −1
Original line number Diff line number Diff line
@@ -14,6 +14,13 @@

exception Error of string

(** Linking mode. *)
module Mode : sig
  type t =
  | DestroySource
  | PreserveSource
end

(** [link_modules dst src mode] links [src] into [dst], raising [Error]
    if the linking fails. *)
val link_modules : Llvm.llmodule -> Llvm.llmodule -> unit
 No newline at end of file
val link_modules : Llvm.llmodule -> Llvm.llmodule -> Mode.t -> unit
 No newline at end of file
+3 −0
Original line number Diff line number Diff line
@@ -383,6 +383,9 @@ The PreserveSource linker mode was removed

It was fairly broken and was removed.

The mode is currently still available in the C API for source
compatibility, but it doesn't have any effect.


Garbage Collection
------------------
Loading