Rollup merge of #125513 - compiler-errors:impossible-drop, r=jackh726

Don't eagerly monomorphize drop for types that are impossible to instantiate

Self-explanatory title I think

Fixes #125509
This commit is contained in:
Matthias Krüger 2024-05-25 12:54:36 +02:00 committed by GitHub
commit 3fc8fe0490
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 0 deletions

View File

@ -1434,6 +1434,15 @@ fn process_item(&mut self, id: hir::ItemId) {
{
debug!("RootCollector: ADT drop-glue for `{id:?}`",);
// This type is impossible to instantiate, so we should not try to
// generate a `drop_in_place` instance for it.
if self.tcx.instantiate_and_check_impossible_predicates((
id.owner_id.to_def_id(),
ty::List::empty(),
)) {
return;
}
let ty = self.tcx.type_of(id.owner_id.to_def_id()).no_bound_vars().unwrap();
visit_drop_use(self.tcx, ty, true, DUMMY_SP, self.output);
}

View File

@ -0,0 +1,18 @@
//@ compile-flags: -Clink-dead-code=on --crate-type=lib
//@ build-pass
#![feature(trivial_bounds)]
#![allow(trivial_bounds)]
// Make sure we don't monomorphize the drop impl for `Baz`, since it has predicates
// that don't hold under a reveal-all param env.
trait Foo {
type Assoc;
}
struct Bar;
struct Baz(<Bar as Foo>::Assoc)
where
Bar: Foo;