From c62e5eade3db8d7df79cc9d1d117008afc0f922f Mon Sep 17 00:00:00 2001 From: csmoe Date: Wed, 29 Sep 2021 08:24:02 +0200 Subject: [PATCH] share drop glue on local items --- compiler/rustc_monomorphize/src/collector.rs | 9 ++++++--- src/test/ui/lang-items/lang-item-correct-generics.rs | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/compiler/rustc_monomorphize/src/collector.rs b/compiler/rustc_monomorphize/src/collector.rs index 1e39b1bd5e80e..120b00711c4d9 100644 --- a/compiler/rustc_monomorphize/src/collector.rs +++ b/compiler/rustc_monomorphize/src/collector.rs @@ -1167,13 +1167,16 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> { | hir::ItemKind::Struct(_, ref generics) | hir::ItemKind::Union(_, ref generics) => { if generics.params.is_empty() { - if self.mode == MonoItemCollectionMode::Eager { + let def_id = item.def_id.to_def_id(); + let force_share_drop_glue = + self.tcx.sess.opts.share_generics() && def_id.is_local(); + if self.mode == MonoItemCollectionMode::Eager || force_share_drop_glue { debug!( "RootCollector: ADT drop-glue for {}", - self.tcx.def_path_str(item.def_id.to_def_id()) + self.tcx.def_path_str(def_id) ); - let ty = Instance::new(item.def_id.to_def_id(), InternalSubsts::empty()) + let ty = Instance::new(def_id, InternalSubsts::empty()) .ty(self.tcx, ty::ParamEnv::reveal_all()); visit_drop_use(self.tcx, ty, true, DUMMY_SP, self.output); } diff --git a/src/test/ui/lang-items/lang-item-correct-generics.rs b/src/test/ui/lang-items/lang-item-correct-generics.rs index a3287db74e733..6153d2a13c156 100644 --- a/src/test/ui/lang-items/lang-item-correct-generics.rs +++ b/src/test/ui/lang-items/lang-item-correct-generics.rs @@ -1,8 +1,8 @@ // build-pass -#![feature(lang_items,no_core)] +#![feature(lang_items, no_core)] #![no_core] -#![crate_type="lib"] +#![crate_type = "lib"] #[lang = "sized"] trait MySized {} @@ -13,6 +13,7 @@ trait MyCopy {} #[lang = "drop"] trait MyDrop {} +#[lang = "drop_in_place"] struct S; impl MyDrop for S {}