mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Don't eagerly monomorphize drop for types that are impossible to instantiate
This commit is contained in:
parent
36153f1a4e
commit
045f448e26
@ -1434,6 +1434,15 @@ impl<'v> RootCollector<'_, 'v> {
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
18
tests/ui/codegen/mono-impossible-drop.rs
Normal file
18
tests/ui/codegen/mono-impossible-drop.rs
Normal 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;
|
Loading…
Reference in New Issue
Block a user