]> granicus.if.org Git - llvm/commitdiff
Merge r242372 to 3.7 so that it goes out in 3.7.1
authorReid Kleckner <rnk@google.com>
Wed, 9 Sep 2015 21:03:25 +0000 (21:03 +0000)
committerReid Kleckner <rnk@google.com>
Wed, 9 Sep 2015 21:03:25 +0000 (21:03 +0000)
It restores the signature of LLVMBuildLandingPad in the C API back to what it
was in 3.6 and earlier.

The 3.7.0 release should have had this but it did not.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_37@247191 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/go/llvm/ir.go
bindings/ocaml/llvm/llvm_ocaml.c
include/llvm-c/Core.h
lib/IR/Core.cpp

index 80f7798ea064a0956105bb7854ee269045740a0a..76f5f06017c80ec6620f8c46eb3ac8ac716452d4 100644 (file)
@@ -1728,7 +1728,7 @@ func (b Builder) CreatePtrDiff(lhs, rhs Value, name string) (v Value) {
 func (b Builder) CreateLandingPad(t Type, personality Value, 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 26835d0155997a0dcd8610a55b5150f20d08dfd0..3889f9276ccd26b54d668e185842bf455c665f15 100644 (file)
@@ -1745,7 +1745,7 @@ CAMLprim LLVMValueRef llvm_build_invoke_bc(value Args[], int NumArgs) {
 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 15290072abe8b43ee86734c92fb3bda849ae518f..9dbcbfea387fad9a471506e1004bc944d3b144f4 100644 (file)
@@ -2675,7 +2675,8 @@ LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef, LLVMValueRef Fn,
                              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);
 
index e0e729d534bd46ac5253d5df077e4d34af76afb5..0eb88a9675751aef7f4fd335afdd81efa736844c 100644 (file)
@@ -2257,7 +2257,14 @@ LLVMValueRef LLVMBuildInvoke(LLVMBuilderRef B, LLVMValueRef Fn,
 }
 
 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));
 }