take opaq types
This commit is contained in:
parent
03d488b48a
commit
7c0fb38095
18 changed files with 293 additions and 185 deletions
|
@ -3,7 +3,7 @@
|
|||
// seems likely that they should eventually be merged into more
|
||||
// general routines.
|
||||
|
||||
use crate::infer::TyCtxtInferExt;
|
||||
use crate::infer::{DefiningAnchor, TyCtxtInferExt};
|
||||
use crate::traits::{
|
||||
FulfillmentContext, ImplSource, Obligation, ObligationCause, SelectionContext, TraitEngine,
|
||||
Unimplemented,
|
||||
|
@ -30,7 +30,9 @@ pub fn codegen_fulfill_obligation<'tcx>(
|
|||
|
||||
// Do the initial selection for the obligation. This yields the
|
||||
// shallow result we are looking for -- that is, what specific impl.
|
||||
tcx.infer_ctxt().enter(|infcx| {
|
||||
tcx.infer_ctxt().with_opaque_type_inference(DefiningAnchor::Bubble).enter(|infcx| {
|
||||
//~^ HACK `Bubble` is required for
|
||||
// this test to pass: type-alias-impl-trait/assoc-projection-ice.rs
|
||||
let mut selcx = SelectionContext::new(&infcx);
|
||||
|
||||
let obligation_cause = ObligationCause::dummy();
|
||||
|
@ -69,7 +71,8 @@ pub fn codegen_fulfill_obligation<'tcx>(
|
|||
|
||||
// Opaque types may have gotten their hidden types constrained, but we can ignore them safely
|
||||
// as they will get constrained elsewhere, too.
|
||||
let _opaque_types = infcx.inner.borrow_mut().opaque_type_storage.take_opaque_types();
|
||||
// (ouz-a) This is required for `type-alias-impl-trait/assoc-projection-ice.rs` to pass
|
||||
let _ = infcx.inner.borrow_mut().opaque_type_storage.take_opaque_types();
|
||||
|
||||
debug!("Cache miss: {trait_ref:?} => {impl_source:?}");
|
||||
Ok(&*tcx.arena.alloc(impl_source))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue