about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-11-20 13:50:47 -0600
committerGitHub <noreply@github.com>2016-11-20 13:50:47 -0600
commit4bc929013396eede8a22a3e7932fb3a63d2a11da (patch)
tree7cf4179bd3aa1701cd6f643791fb99acf4102c3e /src
parentfb122199aac1fd4f9a3c133e25791a9fcb2a6b83 (diff)
parent84415ea1f2a450b0e8896696b8da4accc21b8ef5 (diff)
downloadrust-4bc929013396eede8a22a3e7932fb3a63d2a11da.tar.gz
rust-4bc929013396eede8a22a3e7932fb3a63d2a11da.zip
Auto merge of #37862 - shepmaster:llvm-4.0-always-set-eh-personality, r=eddyb
[LLVM 4.0] Set EH personality when resuming stack unwinding

To resume stack unwinding, the LLVM `resume` instruction must be used.

In order to use this instruction, the calling function must have an
exception handling personality set.

LLVM 4.0 adds a new IR validation check to ensure a personality is
always set in these cases.

This was introduced in [r277360](https://reviews.llvm.org/rL277360).
Diffstat (limited to 'src')
-rw-r--r--src/librustc_trans/mir/block.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/librustc_trans/mir/block.rs b/src/librustc_trans/mir/block.rs
index b22bcf9825a..dd58ca5b357 100644
--- a/src/librustc_trans/mir/block.rs
+++ b/src/librustc_trans/mir/block.rs
@@ -116,6 +116,9 @@ impl<'bcx, 'tcx> MirContext<'bcx, 'tcx> {
                 if let Some(cleanup_pad) = cleanup_pad {
                     bcx.cleanup_ret(cleanup_pad, None);
                 } else {
+                    let llpersonality = bcx.fcx().eh_personality();
+                    bcx.set_personality_fn(llpersonality);
+
                     let ps = self.get_personality_slot(&bcx);
                     let lp = bcx.load(ps);
                     bcx.with_block(|bcx| {