Delay a bug when encountering an impl with unconstrained generics in codegen_select
This commit is contained in:
parent
f5be3ca1e3
commit
50fb40a987
4 changed files with 44 additions and 24 deletions
|
@ -74,12 +74,21 @@ pub(crate) fn codegen_select_candidate<'tcx>(
|
|||
}
|
||||
|
||||
let impl_source = infcx.resolve_vars_if_possible(impl_source);
|
||||
let impl_source = infcx.tcx.erase_regions(impl_source);
|
||||
if impl_source.has_infer() {
|
||||
// Unused lifetimes on an impl get replaced with inference vars, but never resolved,
|
||||
// causing the return value of a query to contain inference vars. We do not have a concept
|
||||
// for this and will in fact ICE in stable hashing of the return value. So bail out instead.
|
||||
infcx.tcx.dcx().has_errors().unwrap();
|
||||
let impl_source = tcx.erase_regions(impl_source);
|
||||
if impl_source.has_non_region_infer() {
|
||||
// Unused generic types or consts on an impl get replaced with inference vars,
|
||||
// but never resolved, causing the return value of a query to contain inference
|
||||
// vars. We do not have a concept for this and will in fact ICE in stable hashing
|
||||
// of the return value. So bail out instead.
|
||||
match impl_source {
|
||||
ImplSource::UserDefined(impl_) => {
|
||||
tcx.dcx().span_delayed_bug(
|
||||
tcx.def_span(impl_.impl_def_id),
|
||||
"this impl has unconstrained generic parameters",
|
||||
);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
return Err(CodegenObligationError::FulfillmentError);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue