Skip to content

Commit 962bf69

Browse files
committed
Take substs into account in conservative_is_privately_uninhabited
1 parent 0af8e87 commit 962bf69

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

src/librustc/ty/sty.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1702,22 +1702,21 @@ impl<'tcx> TyS<'tcx> {
17021702
/// will be `Abi::Uninhabited`. (Note that uninhabited types may have nonzero
17031703
/// size, to account for partial initialisation. See #49298 for details.)
17041704
pub fn conservative_is_privately_uninhabited(&self, tcx: TyCtxt<'tcx>) -> bool {
1705-
// FIXME(varkor): we can make this less conversative by substituting concrete
1706-
// type arguments.
17071705
match self.sty {
17081706
ty::Never => true,
17091707
ty::Adt(def, _) if def.is_union() => {
17101708
// For now, `union`s are never considered uninhabited.
17111709
false
17121710
}
1713-
ty::Adt(def, _) => {
1711+
ty::Adt(def, substs) => {
17141712
// Any ADT is uninhabited if either:
17151713
// (a) It has no variants (i.e. an empty `enum`);
17161714
// (b) Each of its variants (a single one in the case of a `struct`) has at least
17171715
// one uninhabited field.
17181716
def.variants.iter().all(|var| {
17191717
var.fields.iter().any(|field| {
1720-
tcx.type_of(field.did).conservative_is_privately_uninhabited(tcx)
1718+
tcx.type_of(field.did).subst(tcx, substs)
1719+
.conservative_is_privately_uninhabited(tcx)
17211720
})
17221721
})
17231722
}

0 commit comments

Comments
 (0)