Dont consider fields that are forced unstable due to -Zforce-unstable-if-unmarked to be uninhabited

This commit is contained in:
Michael Goulet
2024-12-05 05:00:01 +00:00
parent f6107ca173
commit 0a6a0e47d2
5 changed files with 43 additions and 7 deletions

View File

@@ -15,7 +15,7 @@ use rustc_middle::ty::{
};
use rustc_middle::{bug, span_bug};
use rustc_session::lint;
use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span};
use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span, sym};
use crate::constructor::Constructor::*;
use crate::constructor::{
@@ -232,10 +232,10 @@ impl<'p, 'tcx: 'p> RustcPatCtxt<'p, 'tcx> {
let is_visible =
adt.is_enum() || field.vis.is_accessible_from(cx.module, cx.tcx);
let is_uninhabited = cx.is_uninhabited(*ty);
let is_unstable = cx
.tcx
.lookup_stability(field.did)
.is_some_and(|stab| stab.is_unstable());
let is_unstable =
cx.tcx.lookup_stability(field.did).is_some_and(|stab| {
stab.is_unstable() && stab.feature != sym::rustc_private
});
let skip = is_uninhabited && (!is_visible || is_unstable);
(ty, PrivateUninhabitedField(skip))
});