mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
make Representability::Infinite
carry ErrorGuaranteed
This commit is contained in:
parent
30f74ff0dc
commit
0e7e1bfdbc
@ -601,5 +601,5 @@ impl<'tcx> AdtDef<'tcx> {
|
||||
#[derive(HashStable)]
|
||||
pub enum Representability {
|
||||
Representable,
|
||||
Infinite,
|
||||
Infinite(ErrorGuaranteed),
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ pub(crate) fn provide(providers: &mut Providers) {
|
||||
/// requires calling [`InhabitedPredicate::instantiate`]
|
||||
fn inhabited_predicate_adt(tcx: TyCtxt<'_>, def_id: DefId) -> InhabitedPredicate<'_> {
|
||||
if let Some(def_id) = def_id.as_local() {
|
||||
if matches!(tcx.representability(def_id), ty::Representability::Infinite) {
|
||||
if matches!(tcx.representability(def_id), ty::Representability::Infinite(_)) {
|
||||
return InhabitedPredicate::True;
|
||||
}
|
||||
}
|
||||
|
@ -106,8 +106,8 @@ impl<'tcx> Value<TyCtxt<'tcx>> for Representability {
|
||||
representable_ids.insert(def_id);
|
||||
}
|
||||
}
|
||||
recursive_type_error(tcx, item_and_field_ids, &representable_ids);
|
||||
Representability::Infinite
|
||||
let guar = recursive_type_error(tcx, item_and_field_ids, &representable_ids);
|
||||
Representability::Infinite(guar)
|
||||
}
|
||||
}
|
||||
|
||||
@ -268,7 +268,7 @@ pub fn recursive_type_error(
|
||||
tcx: TyCtxt<'_>,
|
||||
mut item_and_field_ids: Vec<(LocalDefId, LocalDefId)>,
|
||||
representable_ids: &FxHashSet<LocalDefId>,
|
||||
) {
|
||||
) -> ErrorGuaranteed {
|
||||
const ITEM_LIMIT: usize = 5;
|
||||
|
||||
// Rotate the cycle so that the item with the lowest span is first
|
||||
@ -344,7 +344,7 @@ pub fn recursive_type_error(
|
||||
suggestion,
|
||||
Applicability::HasPlaceholders,
|
||||
)
|
||||
.emit();
|
||||
.emit()
|
||||
}
|
||||
|
||||
fn find_item_ty_spans(
|
||||
|
@ -12,7 +12,7 @@ pub(crate) fn provide(providers: &mut Providers) {
|
||||
macro_rules! rtry {
|
||||
($e:expr) => {
|
||||
match $e {
|
||||
e @ Representability::Infinite => return e,
|
||||
e @ Representability::Infinite(_) => return e,
|
||||
Representability::Representable => {}
|
||||
}
|
||||
};
|
||||
|
@ -99,8 +99,8 @@ fn adt_sized_constraint<'tcx>(
|
||||
def_id: DefId,
|
||||
) -> ty::EarlyBinder<&'tcx ty::List<Ty<'tcx>>> {
|
||||
if let Some(def_id) = def_id.as_local() {
|
||||
if matches!(tcx.representability(def_id), ty::Representability::Infinite) {
|
||||
return ty::EarlyBinder::bind(tcx.mk_type_list(&[Ty::new_misc_error(tcx)]));
|
||||
if let ty::Representability::Infinite(guar) = tcx.representability(def_id) {
|
||||
return ty::EarlyBinder::bind(tcx.mk_type_list(&[Ty::new_error(tcx, guar)]));
|
||||
}
|
||||
}
|
||||
let def = tcx.adt_def(def_id);
|
||||
|
Loading…
Reference in New Issue
Block a user