From 99a108c03654cd9d2df21223eb55a5dfd6552cb8 Mon Sep 17 00:00:00 2001 From: Bastian Köcher Date: Thu, 21 Dec 2017 12:03:01 +0100 Subject: Fixes compilation errors and adds proposed improvements --- src/librustc_mir/monomorphize/collector.rs | 5 ++--- src/librustc_mir/monomorphize/partitioning.rs | 7 ++----- src/libstd/termination.rs | 2 ++ 3 files changed, 6 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs index afd895eb7ca..ccb648cd929 100644 --- a/src/librustc_mir/monomorphize/collector.rs +++ b/src/librustc_mir/monomorphize/collector.rs @@ -195,7 +195,6 @@ use rustc::hir::map as hir_map; use rustc::hir::def_id::DefId; use rustc::middle::const_val::ConstVal; use rustc::middle::lang_items::{ExchangeMallocFnLangItem,StartFnLangItem}; -use rustc::middle::trans::TransItem; use rustc::traits; use rustc::ty::subst::{Substs, Kind}; use rustc::ty::{self, TypeFoldable, Ty, TyCtxt}; @@ -1001,7 +1000,7 @@ impl<'b, 'a, 'v> RootCollector<'b, 'a, 'v> { debug!("RootCollector::push_if_root: found root def_id={:?}", def_id); let instance = Instance::mono(self.tcx, def_id); - self.output.push(create_fn_trans_item(instance)); + self.output.push(create_fn_mono_item(instance)); self.push_extra_entry_roots(def_id); } @@ -1041,7 +1040,7 @@ impl<'b, 'a, 'v> RootCollector<'b, 'a, 'v> { self.tcx.mk_substs(iter::once(Kind::from(main_ret_ty))) ).unwrap(); - self.output.push(create_fn_trans_item(start_instance)); + self.output.push(create_fn_mono_item(start_instance)); } } diff --git a/src/librustc_mir/monomorphize/partitioning.rs b/src/librustc_mir/monomorphize/partitioning.rs index e34698da4da..1a4849ac199 100644 --- a/src/librustc_mir/monomorphize/partitioning.rs +++ b/src/librustc_mir/monomorphize/partitioning.rs @@ -106,8 +106,7 @@ use monomorphize::collector::InliningMap; use rustc::dep_graph::WorkProductId; use rustc::hir::def_id::DefId; use rustc::hir::map::DefPathData; -use rustc::middle::lang_items::StartFnLangItem; -use rustc::middle::trans::{Linkage, Visibility}; +use rustc::mir::mono::{Linkage, Visibility}; use rustc::ty::{self, TyCtxt, InstanceDef}; use rustc::ty::item_path::characteristic_def_id_of_type; use rustc::util::nodemap::{FxHashMap, FxHashSet}; @@ -313,11 +312,9 @@ fn place_root_translation_items<'a, 'tcx, I>(tcx: TyCtxt<'a, 'tcx, 'tcx>, MonoItem::Fn(ref instance) => { let visibility = match instance.def { InstanceDef::Item(def_id) => { - let start_def_id = tcx.lang_items().require(StartFnLangItem); - // If we encounter the lang start item, we set the visibility to // default. - if start_def_id == Ok(def_id) { + if tcx.lang_items().start_fn() == Some(def_id) { Visibility::Default } else if def_id.is_local() { if tcx.is_exported_symbol(def_id) { diff --git a/src/libstd/termination.rs b/src/libstd/termination.rs index a08d3dd2d52..5eeaa542b41 100644 --- a/src/libstd/termination.rs +++ b/src/libstd/termination.rs @@ -21,6 +21,8 @@ use libc; /// a successful execution. In case of a failure, `libc::EXIT_FAILURE` is returned. #[cfg_attr(not(stage0), lang = "termination")] #[unstable(feature = "termination_trait", issue = "0")] +#[rustc_on_unimplemented = + "`main` can only return types that implement {Termination}, not `{Self}`"] pub trait Termination { /// Is called to get the representation of the value as status code. /// This status code is returned to the operating system. -- cgit 1.4.1-3-g733a5