add 'ty_error_with_guaranteed' and 'const_error_with_guaranteed'
This commit is contained in:
parent
57d3c58ed6
commit
1f21b96dce
15 changed files with 68 additions and 47 deletions
|
@ -1201,7 +1201,8 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
(_, _) => {
|
||||
let got = if let Some(_) = term.ty() { "type" } else { "constant" };
|
||||
let expected = def_kind.descr(assoc_item_def_id);
|
||||
tcx.sess
|
||||
let reported = tcx
|
||||
.sess
|
||||
.struct_span_err(
|
||||
binding.span,
|
||||
&format!("expected {expected} bound, found {got}"),
|
||||
|
@ -1212,11 +1213,14 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
)
|
||||
.emit();
|
||||
term = match def_kind {
|
||||
hir::def::DefKind::AssocTy => tcx.ty_error().into(),
|
||||
hir::def::DefKind::AssocTy => {
|
||||
tcx.ty_error_with_guaranteed(reported).into()
|
||||
}
|
||||
hir::def::DefKind::AssocConst => tcx
|
||||
.const_error(
|
||||
.const_error_with_guaranteed(
|
||||
tcx.bound_type_of(assoc_item_def_id)
|
||||
.subst(tcx, projection_ty.skip_binder().substs),
|
||||
reported,
|
||||
)
|
||||
.into(),
|
||||
_ => unreachable!(),
|
||||
|
@ -1334,8 +1338,9 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
.map(|&(trait_ref, _, _)| trait_ref.def_id())
|
||||
.find(|&trait_ref| tcx.is_trait_alias(trait_ref))
|
||||
.map(|trait_ref| tcx.def_span(trait_ref));
|
||||
tcx.sess.emit_err(TraitObjectDeclaredWithNoTraits { span, trait_alias_span });
|
||||
return tcx.ty_error();
|
||||
let reported =
|
||||
tcx.sess.emit_err(TraitObjectDeclaredWithNoTraits { span, trait_alias_span });
|
||||
return tcx.ty_error_with_guaranteed(reported);
|
||||
}
|
||||
|
||||
// Check that there are no gross object safety violations;
|
||||
|
@ -1345,14 +1350,14 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
let object_safety_violations =
|
||||
astconv_object_safety_violations(tcx, item.trait_ref().def_id());
|
||||
if !object_safety_violations.is_empty() {
|
||||
report_object_safety_error(
|
||||
let reported = report_object_safety_error(
|
||||
tcx,
|
||||
span,
|
||||
item.trait_ref().def_id(),
|
||||
&object_safety_violations,
|
||||
)
|
||||
.emit();
|
||||
return tcx.ty_error();
|
||||
return tcx.ty_error_with_guaranteed(reported);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2112,13 +2117,13 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
"Type"
|
||||
};
|
||||
|
||||
self.report_ambiguous_associated_type(
|
||||
let reported = self.report_ambiguous_associated_type(
|
||||
span,
|
||||
type_name,
|
||||
&path_str,
|
||||
item_segment.ident.name,
|
||||
);
|
||||
return tcx.ty_error();
|
||||
return tcx.ty_error_with_guaranteed(reported)
|
||||
};
|
||||
|
||||
debug!("qpath_to_ty: self_type={:?}", self_ty);
|
||||
|
@ -2560,8 +2565,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
|
|||
{
|
||||
err.span_note(impl_.self_ty.span, "not a concrete type");
|
||||
}
|
||||
err.emit();
|
||||
tcx.ty_error()
|
||||
tcx.ty_error_with_guaranteed(err.emit())
|
||||
} else {
|
||||
self.normalize_ty(span, ty)
|
||||
}
|
||||
|
|
|
@ -611,11 +611,11 @@ pub fn collect_trait_impl_trait_tys<'tcx>(
|
|||
collected_tys.insert(def_id, ty);
|
||||
}
|
||||
Err(err) => {
|
||||
tcx.sess.delay_span_bug(
|
||||
let reported = tcx.sess.delay_span_bug(
|
||||
return_span,
|
||||
format!("could not fully resolve: {ty} => {err:?}"),
|
||||
);
|
||||
collected_tys.insert(def_id, tcx.ty_error());
|
||||
collected_tys.insert(def_id, tcx.ty_error_with_guaranteed(reported));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -512,8 +512,7 @@ impl<'tcx> AstConv<'tcx> for ItemCtxt<'tcx> {
|
|||
}
|
||||
_ => {}
|
||||
}
|
||||
err.emit();
|
||||
self.tcx().ty_error()
|
||||
self.tcx().ty_error_with_guaranteed(err.emit())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -698,7 +698,7 @@ fn find_opaque_ty_constraints_for_tait(tcx: TyCtxt<'_>, def_id: LocalDefId) -> T
|
|||
}
|
||||
|
||||
let Some(hidden) = locator.found else {
|
||||
tcx.sess.emit_err(UnconstrainedOpaqueType {
|
||||
let reported = tcx.sess.emit_err(UnconstrainedOpaqueType {
|
||||
span: tcx.def_span(def_id),
|
||||
name: tcx.item_name(tcx.local_parent(def_id).to_def_id()),
|
||||
what: match tcx.hir().get(scope) {
|
||||
|
@ -708,7 +708,7 @@ fn find_opaque_ty_constraints_for_tait(tcx: TyCtxt<'_>, def_id: LocalDefId) -> T
|
|||
_ => "item",
|
||||
},
|
||||
});
|
||||
return tcx.ty_error();
|
||||
return tcx.ty_error_with_guaranteed(reported);
|
||||
};
|
||||
|
||||
// Only check against typeck if we didn't already error
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue