diff options
| author | ouz-a <oguz.agcayazi@gmail.com> | 2022-07-02 16:37:49 +0300 |
|---|---|---|
| committer | ouz-a <oguz.agcayazi@gmail.com> | 2022-07-20 12:43:10 +0300 |
| commit | 7c0fb3809589985af2db5f95c64a529da1c162d5 (patch) | |
| tree | 661ec3f365054f15903532a1ec3f48cbce74fbcd /compiler/rustc_trait_selection/src/traits/codegen.rs | |
| parent | 03d488b48af9f66b91e9400387f781b82411fa82 (diff) | |
| download | rust-7c0fb3809589985af2db5f95c64a529da1c162d5.tar.gz rust-7c0fb3809589985af2db5f95c64a529da1c162d5.zip | |
take opaq types
Diffstat (limited to 'compiler/rustc_trait_selection/src/traits/codegen.rs')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/codegen.rs | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/codegen.rs b/compiler/rustc_trait_selection/src/traits/codegen.rs index 6ca630b74cc..c2b2e319951 100644 --- a/compiler/rustc_trait_selection/src/traits/codegen.rs +++ b/compiler/rustc_trait_selection/src/traits/codegen.rs @@ -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)) |
