about summary refs log tree commit diff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2020-04-30 07:04:43 +0000
committerbors <bors@rust-lang.org>2020-04-30 07:04:43 +0000
commitbf459752d41a93eb6df0e9513de4ef807883a80c (patch)
tree6a6e05a05077a1f72fcf055196b69be3eb341b6a /src/librustc_mir
parent7c8dbd969dd0ef2af6d8bab9e03ba7ce6cac41a2 (diff)
parentc6817ffb2cadae7f80414e13d99e89ec83db9a77 (diff)
downloadrust-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.rs3
-rw-r--r--src/librustc_mir/transform/no_landing_pads.rs3
-rw-r--r--src/librustc_mir/transform/remove_noop_landing_pads.rs3
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);