Skip to content

Commit 0832a23

Browse files
Oops opaques
1 parent c7b3748 commit 0832a23

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

compiler/rustc_infer/src/infer/context.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,9 @@ impl<'tcx> rustc_type_ir::InferCtxtLike for InferCtxt<'tcx> {
260260
fn opaque_types_storage_num_entries(&self) -> OpaqueTypeStorageEntries {
261261
self.inner.borrow_mut().opaque_types().num_entries()
262262
}
263+
fn opaque_types_storage_num_unique_entries_raw(&self) -> usize {
264+
self.inner.borrow_mut().opaque_types().num_entries().opaque_types
265+
}
263266
fn clone_opaque_types_lookup_table(&self) -> Vec<(ty::OpaqueTypeKey<'tcx>, Ty<'tcx>)> {
264267
self.inner.borrow_mut().opaque_types().iter_lookup_table().map(|(k, h)| (k, h.ty)).collect()
265268
}

compiler/rustc_infer/src/infer/opaque_types/table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub struct OpaqueTypeStorage<'tcx> {
2020
/// the opaque types currently in the storage.
2121
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
2222
pub struct OpaqueTypeStorageEntries {
23-
opaque_types: usize,
23+
pub opaque_types: usize,
2424
duplicate_entries: usize,
2525
}
2626

compiler/rustc_next_trait_solver/src/solve/eval_ctxt/canonical.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,16 @@ where
5959
cache_key: Option<CanonicalGoalCacheKey<I>>,
6060
) -> (Vec<I::GenericArg>, CanonicalInput<I, I::Predicate>) {
6161
if let Some(cache_key) = cache_key {
62-
if !cache_key.orig_values.iter().any(|value| self.delegate.is_changed_arg(value)) {
62+
if !cache_key.orig_values.iter().any(|value| self.delegate.is_changed_arg(value))
63+
&& self.delegate.opaque_types_storage_num_unique_entries_raw()
64+
== cache_key
65+
.canonical_goal
66+
.canonical
67+
.value
68+
.predefined_opaques_in_body
69+
.opaque_types
70+
.len()
71+
{
6372
return (cache_key.orig_values.to_vec(), cache_key.canonical_goal);
6473
}
6574
}

compiler/rustc_type_ir/src/infer_ctxt.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,7 @@ pub trait InferCtxtLike: Sized {
252252

253253
type OpaqueTypeStorageEntries: Debug + Copy + Default;
254254
fn opaque_types_storage_num_entries(&self) -> Self::OpaqueTypeStorageEntries;
255+
fn opaque_types_storage_num_unique_entries_raw(&self) -> usize;
255256
fn clone_opaque_types_lookup_table(
256257
&self,
257258
) -> Vec<(ty::OpaqueTypeKey<Self::Interner>, <Self::Interner as Interner>::Ty)>;

0 commit comments

Comments
 (0)