Skip to content

Commit c62e5ea

Browse files
committed
share drop glue on local items
1 parent 6df1d82 commit c62e5ea

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

compiler/rustc_monomorphize/src/collector.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -1167,13 +1167,16 @@ impl ItemLikeVisitor<'v> for RootCollector<'_, 'v> {
11671167
| hir::ItemKind::Struct(_, ref generics)
11681168
| hir::ItemKind::Union(_, ref generics) => {
11691169
if generics.params.is_empty() {
1170-
if self.mode == MonoItemCollectionMode::Eager {
1170+
let def_id = item.def_id.to_def_id();
1171+
let force_share_drop_glue =
1172+
self.tcx.sess.opts.share_generics() && def_id.is_local();
1173+
if self.mode == MonoItemCollectionMode::Eager || force_share_drop_glue {
11711174
debug!(
11721175
"RootCollector: ADT drop-glue for {}",
1173-
self.tcx.def_path_str(item.def_id.to_def_id())
1176+
self.tcx.def_path_str(def_id)
11741177
);
11751178

1176-
let ty = Instance::new(item.def_id.to_def_id(), InternalSubsts::empty())
1179+
let ty = Instance::new(def_id, InternalSubsts::empty())
11771180
.ty(self.tcx, ty::ParamEnv::reveal_all());
11781181
visit_drop_use(self.tcx, ty, true, DUMMY_SP, self.output);
11791182
}

src/test/ui/lang-items/lang-item-correct-generics.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// build-pass
22

3-
#![feature(lang_items,no_core)]
3+
#![feature(lang_items, no_core)]
44
#![no_core]
5-
#![crate_type="lib"]
5+
#![crate_type = "lib"]
66

77
#[lang = "sized"]
88
trait MySized {}
@@ -13,6 +13,7 @@ trait MyCopy {}
1313
#[lang = "drop"]
1414
trait MyDrop<T> {}
1515

16+
#[lang = "drop_in_place"]
1617
struct S;
1718

1819
impl<T> MyDrop<T> for S {}

0 commit comments

Comments
 (0)