forked from mirrors/nixpkgs
b45161fbbe
Rust runs into a bug with LLVM 3.7.0 that's fixed in the upcoming release 3.7.1. This commit backports this fix.
61 lines
2.8 KiB
Diff
61 lines
2.8 KiB
Diff
Index: llvm/bindings/ocaml/llvm/llvm_ocaml.c
|
|
===================================================================
|
|
--- llvm/bindings/ocaml/llvm/llvm_ocaml.c (revision 242371)
|
|
+++ llvm/bindings/ocaml/llvm/llvm_ocaml.c (revision 242372)
|
|
@@ -1745,7 +1745,7 @@
|
|
CAMLprim LLVMValueRef llvm_build_landingpad(LLVMTypeRef Ty, LLVMValueRef PersFn,
|
|
value NumClauses, value Name,
|
|
value B) {
|
|
- return LLVMBuildLandingPad(Builder_val(B), Ty, Int_val(NumClauses),
|
|
+ return LLVMBuildLandingPad(Builder_val(B), Ty, PersFn, Int_val(NumClauses),
|
|
String_val(Name));
|
|
}
|
|
|
|
Index: llvm/bindings/go/llvm/ir.go
|
|
===================================================================
|
|
--- llvm/bindings/go/llvm/ir.go (revision 242371)
|
|
+++ llvm/bindings/go/llvm/ir.go (revision 242372)
|
|
@@ -1731,7 +1731,7 @@
|
|
func (b Builder) CreateLandingPad(t Type, nclauses int, name string) (l Value) {
|
|
cname := C.CString(name)
|
|
defer C.free(unsafe.Pointer(cname))
|
|
- l.C = C.LLVMBuildLandingPad(b.C, t.C, C.unsigned(nclauses), cname)
|
|
+ l.C = C.LLVMBuildLandingPad(b.C, t.C, nil, C.unsigned(nclauses), cname)
|
|
return l
|
|
}
|
|
|
|
Index: llvm/lib/IR/Core.cpp
|
|
===================================================================
|
|
--- llvm/lib/IR/Core.cpp (revision 242371)
|
|
+++ llvm/lib/IR/Core.cpp (revision 242372)
|
|
@@ -2257,7 +2257,14 @@
|
|
}
|
|
|
|
LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
|
|
- unsigned NumClauses, const char *Name) {
|
|
+ LLVMValueRef PersFn, unsigned NumClauses,
|
|
+ const char *Name) {
|
|
+ // The personality used to live on the landingpad instruction, but now it
|
|
+ // lives on the parent function. For compatibility, take the provided
|
|
+ // personality and put it on the parent function.
|
|
+ if (PersFn)
|
|
+ unwrap(B)->GetInsertBlock()->getParent()->setPersonalityFn(
|
|
+ cast<Function>(unwrap(PersFn)));
|
|
return wrap(unwrap(B)->CreateLandingPad(unwrap(Ty), NumClauses, Name));
|
|
}
|
|
|
|
Index: llvm/include/llvm-c/Core.h
|
|
===================================================================
|
|
--- llvm/include/llvm-c/Core.h (revision 242371)
|
|
+++ llvm/include/llvm-c/Core.h (revision 242372)
|
|
@@ -2675,7 +2675,8 @@
|
|
LLVMBasicBlockRef Then, LLVMBasicBlockRef Catch,
|
|
const char *Name);
|
|
LLVMValueRef LLVMBuildLandingPad(LLVMBuilderRef B, LLVMTypeRef Ty,
|
|
- unsigned NumClauses, const char *Name);
|
|
+ LLVMValueRef PersFn, unsigned NumClauses,
|
|
+ const char *Name);
|
|
LLVMValueRef LLVMBuildResume(LLVMBuilderRef B, LLVMValueRef Exn);
|
|
LLVMValueRef LLVMBuildUnreachable(LLVMBuilderRef);
|
|
|