Merge check_mod_impl_wf
and check_mod_type_wf
This commit is contained in:
parent
aa029ce4d8
commit
8206cffc48
63 changed files with 736 additions and 245 deletions
|
@ -6,7 +6,7 @@
|
|||
use rustc_infer::infer::TyCtxtInferExt;
|
||||
use rustc_infer::traits::{FulfillmentErrorCode, TraitEngineExt as _};
|
||||
use rustc_middle::traits::CodegenObligationError;
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_middle::ty::{self, TyCtxt, TypeVisitableExt};
|
||||
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
|
||||
use rustc_trait_selection::traits::{
|
||||
ImplSource, Obligation, ObligationCause, SelectionContext, TraitEngine, TraitEngineExt,
|
||||
|
@ -72,6 +72,13 @@ pub 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();
|
||||
return Err(CodegenObligationError::FulfillmentError);
|
||||
}
|
||||
|
||||
Ok(&*tcx.arena.alloc(impl_source))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue