Unnamed repository; edit this file 'description' to name the repository.
Require `MetaSized`
Required since 1.88.0.
Chayim Refael Friedman 2 weeks ago
parent e2c2526 · commit 5cfd982
-rw-r--r--crates/hir-ty/src/dyn_compatibility.rs18
-rw-r--r--crates/hir-ty/src/tests/regression/new_solver.rs57
2 files changed, 6 insertions, 69 deletions
diff --git a/crates/hir-ty/src/dyn_compatibility.rs b/crates/hir-ty/src/dyn_compatibility.rs
index 751e1424ab..bf7970d629 100644
--- a/crates/hir-ty/src/dyn_compatibility.rs
+++ b/crates/hir-ty/src/dyn_compatibility.rs
@@ -426,15 +426,9 @@ fn receiver_is_dispatchable<'db>(
return false;
};
- let meta_sized_did = lang_items.MetaSized;
-
- // TODO: This is for supporting dyn compatibility for toolchains doesn't contain `MetaSized`
- // trait. Uncomment and short circuit here once `MINIMUM_SUPPORTED_TOOLCHAIN_VERSION`
- // become > 1.88.0
- //
- // let Some(meta_sized_did) = meta_sized_did else {
- // return false;
- // };
+ let Some(meta_sized_did) = lang_items.MetaSized else {
+ return false;
+ };
// Type `U`
// FIXME: That seems problematic to fake a generic param like that?
@@ -455,8 +449,8 @@ fn receiver_is_dispatchable<'db>(
});
let trait_predicate = TraitRef::new_from_args(interner, trait_.into(), args);
- let meta_sized_predicate = meta_sized_did
- .map(|did| TraitRef::new(interner, did.into(), [unsized_self_ty]).upcast(interner));
+ let meta_sized_predicate =
+ TraitRef::new(interner, meta_sized_did.into(), [unsized_self_ty]).upcast(interner);
ParamEnv {
clauses: Clauses::new_from_iter(
@@ -465,7 +459,7 @@ fn receiver_is_dispatchable<'db>(
.iter_identity()
.map(Unnormalized::skip_norm_wip)
.chain([unsize_predicate.upcast(interner), trait_predicate.upcast(interner)])
- .chain(meta_sized_predicate),
+ .chain(std::iter::once(meta_sized_predicate)),
),
}
};
diff --git a/crates/hir-ty/src/tests/regression/new_solver.rs b/crates/hir-ty/src/tests/regression/new_solver.rs
index 121e3959ce..154cddf40f 100644
--- a/crates/hir-ty/src/tests/regression/new_solver.rs
+++ b/crates/hir-ty/src/tests/regression/new_solver.rs
@@ -279,63 +279,6 @@ fn main() {
debug(&1);
}"#,
);
-
- // toolchains <= 1.88.0, before sized-hierarchy.
- check_no_mismatches(
- r#"
-#![feature(lang_items)]
-#[lang = "sized"]
-pub trait Sized {}
-
-#[lang = "unsize"]
-pub trait Unsize<T: ?Sized> {}
-
-#[lang = "coerce_unsized"]
-pub trait CoerceUnsized<T: ?Sized> {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a mut U> for &'a mut T {}
-
-impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b mut T {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for &'a mut T {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for &'a mut T {}
-
-impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for &'a T {}
-
-impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
-
-impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *mut T {}
-
-impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*const U> for *const T {}
-
-#[lang = "dispatch_from_dyn"]
-pub trait DispatchFromDyn<T> {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<&'a U> for &'a T {}
-
-impl<'a, T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<&'a mut U> for &'a mut T {}
-
-impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*const U> for *const T {}
-
-impl<T: ?Sized + Unsize<U>, U: ?Sized> DispatchFromDyn<*mut U> for *mut T {}
-
-trait Foo {
- fn bar(&self) -> u32 {
- 0xCAFE
- }
-}
-
-fn debug(_: &dyn Foo) {}
-
-impl Foo for i32 {}
-
-fn main() {
- debug(&1);
-}"#,
- );
}
#[test]