From eb4725fc5405605c4bd17800ccf8c583bfe79be5 Mon Sep 17 00:00:00 2001 From: Amanieu d'Antras Date: Tue, 31 Mar 2020 23:15:39 +0100 Subject: [PATCH] Remove Session::no_landing_pads() --- src/librustc_codegen_llvm/attributes.rs | 5 ++++- src/librustc_codegen_llvm/intrinsic.rs | 3 ++- src/librustc_codegen_ssa/back/write.rs | 4 ++-- src/librustc_mir/transform/generator.rs | 3 ++- src/librustc_mir/transform/no_landing_pads.rs | 3 ++- src/librustc_mir/transform/remove_noop_landing_pads.rs | 3 ++- src/librustc_mir_build/build/mod.rs | 5 ----- src/librustc_session/session.rs | 3 --- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/librustc_codegen_llvm/attributes.rs b/src/librustc_codegen_llvm/attributes.rs index ba286e5f40d2..6ef303c848dc 100644 --- a/src/librustc_codegen_llvm/attributes.rs +++ b/src/librustc_codegen_llvm/attributes.rs @@ -13,6 +13,7 @@ use rustc_middle::ty::query::Providers; use rustc_middle::ty::{self, TyCtxt}; use rustc_session::config::{OptLevel, Sanitizer}; use rustc_session::Session; +use rustc_target::spec::PanicStrategy; use crate::attributes; use crate::llvm::AttributePlace::Function; @@ -270,7 +271,9 @@ pub fn from_fn_attrs(cx: &CodegenCx<'ll, 'tcx>, llfn: &'ll Value, instance: ty:: // // You can also find more info on why Windows is whitelisted here in: // https://bugzilla.mozilla.org/show_bug.cgi?id=1302078 - if !cx.sess().no_landing_pads() || cx.sess().target.target.options.requires_uwtable { + if cx.sess().panic_strategy() == PanicStrategy::Unwind + || cx.sess().target.target.options.requires_uwtable + { attributes::emit_uwtable(llfn, true); } diff --git a/src/librustc_codegen_llvm/intrinsic.rs b/src/librustc_codegen_llvm/intrinsic.rs index 86d10e91d6de..ddf21ff6338e 100644 --- a/src/librustc_codegen_llvm/intrinsic.rs +++ b/src/librustc_codegen_llvm/intrinsic.rs @@ -22,6 +22,7 @@ use rustc_middle::ty::{self, Ty}; use rustc_middle::{bug, span_bug}; use rustc_span::Span; use rustc_target::abi::{self, HasDataLayout, LayoutOf, Primitive}; +use rustc_target::spec::PanicStrategy; use std::cmp::Ordering; use std::iter; @@ -804,7 +805,7 @@ fn try_intrinsic( catch_func: &'ll Value, dest: &'ll Value, ) { - if bx.sess().no_landing_pads() { + if bx.sess().panic_strategy() == PanicStrategy::Abort { bx.call(try_func, &[data], None); // Return 0 unconditionally from the intrinsic call; // we can never unwind. diff --git a/src/librustc_codegen_ssa/back/write.rs b/src/librustc_codegen_ssa/back/write.rs index c84f38670f77..4bc377a6d177 100644 --- a/src/librustc_codegen_ssa/back/write.rs +++ b/src/librustc_codegen_ssa/back/write.rs @@ -36,7 +36,7 @@ use rustc_session::Session; use rustc_span::hygiene::ExpnId; use rustc_span::source_map::SourceMap; use rustc_span::symbol::{sym, Symbol}; -use rustc_target::spec::MergeFunctions; +use rustc_target::spec::{MergeFunctions, PanicStrategy}; use std::any::Any; use std::fs; @@ -1021,7 +1021,7 @@ fn start_executing_work( crate_types: sess.crate_types.borrow().clone(), each_linked_rlib_for_lto, lto: sess.lto(), - no_landing_pads: sess.no_landing_pads(), + no_landing_pads: sess.panic_strategy() == PanicStrategy::Abort, fewer_names: sess.fewer_names(), save_temps: sess.opts.cg.save_temps, opts: Arc::new(sess.opts.clone()), diff --git a/src/librustc_mir/transform/generator.rs b/src/librustc_mir/transform/generator.rs index 611d03405e2c..00caa06a6c0f 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 d89c8e72e526..3bffafa1b2f9 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 44a68a8040f1..a86ef7f2f522 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); diff --git a/src/librustc_mir_build/build/mod.rs b/src/librustc_mir_build/build/mod.rs index 69a04e772ece..5a1a6c7bbf79 100644 --- a/src/librustc_mir_build/build/mod.rs +++ b/src/librustc_mir_build/build/mod.rs @@ -533,11 +533,6 @@ fn should_abort_on_panic(tcx: TyCtxt<'_>, fn_def_id: LocalDefId, _abi: Abi) -> b return false; } - // We cannot add landing pads, so don't add one. - if tcx.sess.no_landing_pads() { - return false; - } - // This is a special case: some functions have a C abi but are meant to // unwind anyway. Don't stop them. match unwind_attr { diff --git a/src/librustc_session/session.rs b/src/librustc_session/session.rs index 56e5a0b3d50b..3b7c2f268ce5 100644 --- a/src/librustc_session/session.rs +++ b/src/librustc_session/session.rs @@ -540,9 +540,6 @@ impl Session { self.opts.debugging_opts.fewer_names || !more_names } - pub fn no_landing_pads(&self) -> bool { - self.panic_strategy() == PanicStrategy::Abort - } pub fn unstable_options(&self) -> bool { self.opts.debugging_opts.unstable_options }