diff options
| author | bors <bors@rust-lang.org> | 2020-04-30 07:04:43 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-04-30 07:04:43 +0000 |
| commit | bf459752d41a93eb6df0e9513de4ef807883a80c (patch) | |
| tree | 6a6e05a05077a1f72fcf055196b69be3eb341b6a /src/librustc_mir | |
| parent | 7c8dbd969dd0ef2af6d8bab9e03ba7ce6cac41a2 (diff) | |
| parent | c6817ffb2cadae7f80414e13d99e89ec83db9a77 (diff) | |
| download | rust-bf459752d41a93eb6df0e9513de4ef807883a80c.tar.gz rust-bf459752d41a93eb6df0e9513de4ef807883a80c.zip | |
Auto merge of #70175 - Amanieu:remove_nlp, r=pnkfelix
Remove -Z no-landing-pads flag Since #67502, `-Z no-landing-pads` will cause all attempted unwinds to abort since we don't generate a `try` / `catch`. This previously worked because `__rust_try` was located in libpanic_unwind which is always compiled with `-C panic=unwind`, but `__rust_try` is now directly inline into the crate that uses `catch_unwind`. As such, `-Z no-landing-pads` is now mostly useless and people should use `-C panic=abort` instead.
Diffstat (limited to 'src/librustc_mir')
| -rw-r--r-- | src/librustc_mir/transform/generator.rs | 3 | ||||
| -rw-r--r-- | src/librustc_mir/transform/no_landing_pads.rs | 3 | ||||
| -rw-r--r-- | src/librustc_mir/transform/remove_noop_landing_pads.rs | 3 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index 611d03405e2..00caa06a6c0 100644 --- a/src/librustc_mir/transform/generator.rs +++ b/src/librustc_mir/transform/generator.rs @@ -68,6 +68,7 @@ use rustc_middle::ty::subst::SubstsRef; use rustc_middle::ty::GeneratorSubsts; use rustc_middle::ty::{self, AdtDef, Ty, TyCtxt}; use rustc_target::abi::VariantIdx; +use rustc_target::spec::PanicStrategy; use std::borrow::Cow; use std::iter; @@ -978,7 +979,7 @@ fn can_return<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) -> bool { fn can_unwind<'tcx>(tcx: TyCtxt<'tcx>, body: &Body<'tcx>) -> bool { // Nothing can unwind when landing pads are off. - if tcx.sess.no_landing_pads() { + if tcx.sess.panic_strategy() == PanicStrategy::Abort { return false; } diff --git a/src/librustc_mir/transform/no_landing_pads.rs b/src/librustc_mir/transform/no_landing_pads.rs index d89c8e72e52..3bffafa1b2f 100644 --- a/src/librustc_mir/transform/no_landing_pads.rs +++ b/src/librustc_mir/transform/no_landing_pads.rs @@ -5,6 +5,7 @@ use crate::transform::{MirPass, MirSource}; use rustc_middle::mir::visit::MutVisitor; use rustc_middle::mir::*; use rustc_middle::ty::TyCtxt; +use rustc_target::spec::PanicStrategy; pub struct NoLandingPads<'tcx> { tcx: TyCtxt<'tcx>, @@ -23,7 +24,7 @@ impl<'tcx> MirPass<'tcx> for NoLandingPads<'tcx> { } pub fn no_landing_pads<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { - if tcx.sess.no_landing_pads() { + if tcx.sess.panic_strategy() == PanicStrategy::Abort { NoLandingPads::new(tcx).visit_body(body); } } diff --git a/src/librustc_mir/transform/remove_noop_landing_pads.rs b/src/librustc_mir/transform/remove_noop_landing_pads.rs index 44a68a8040f..a86ef7f2f52 100644 --- a/src/librustc_mir/transform/remove_noop_landing_pads.rs +++ b/src/librustc_mir/transform/remove_noop_landing_pads.rs @@ -3,6 +3,7 @@ use crate::util::patch::MirPatch; use rustc_index::bit_set::BitSet; use rustc_middle::mir::*; use rustc_middle::ty::TyCtxt; +use rustc_target::spec::PanicStrategy; /// A pass that removes noop landing pads and replaces jumps to them with /// `None`. This is important because otherwise LLVM generates terrible @@ -10,7 +11,7 @@ use rustc_middle::ty::TyCtxt; pub struct RemoveNoopLandingPads; pub fn remove_noop_landing_pads<'tcx>(tcx: TyCtxt<'tcx>, body: &mut Body<'tcx>) { - if tcx.sess.no_landing_pads() { + if tcx.sess.panic_strategy() == PanicStrategy::Abort { return; } debug!("remove_noop_landing_pads({:?})", body); |
