summaryrefslogtreecommitdiffstats
path: root/src/test/ui/associated-types/associated-types-conditional-dispatch.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:03 +0000
commit64d98f8ee037282c35007b64c2649055c56af1db (patch)
tree5492bcf97fce41ee1c0b1cc2add283f3e66cdab0 /src/test/ui/associated-types/associated-types-conditional-dispatch.rs
parentAdding debian version 1.67.1+dfsg1-1. (diff)
downloadrustc-64d98f8ee037282c35007b64c2649055c56af1db.tar.xz
rustc-64d98f8ee037282c35007b64c2649055c56af1db.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/associated-types/associated-types-conditional-dispatch.rs')
-rw-r--r--src/test/ui/associated-types/associated-types-conditional-dispatch.rs66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/test/ui/associated-types/associated-types-conditional-dispatch.rs b/src/test/ui/associated-types/associated-types-conditional-dispatch.rs
deleted file mode 100644
index 70ee60517..000000000
--- a/src/test/ui/associated-types/associated-types-conditional-dispatch.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-// run-pass
-// Test that we evaluate projection predicates to winnow out
-// candidates during trait selection and method resolution (#20296).
-// If we don't properly winnow out candidates based on the output type
-// `Target=[A]`, then the impl marked with `(*)` is seen to conflict
-// with all the others.
-
-// pretty-expanded FIXME #23616
-
-use std::marker::PhantomData;
-use std::ops::Deref;
-
-pub trait MyEq<U: ?Sized=Self> {
- fn eq(&self, u: &U) -> bool;
-}
-
-impl<A, B> MyEq<[B]> for [A]
- where A : MyEq<B>
-{
- fn eq(&self, other: &[B]) -> bool {
- self.len() == other.len() &&
- self.iter().zip(other).all(|(a, b)| MyEq::eq(a, b))
- }
-}
-
-// (*) This impl conflicts with everything unless the `Target=[A]`
-// constraint is considered.
-impl<'a, A, B, Lhs> MyEq<[B; 0]> for Lhs
- where A: MyEq<B>, Lhs: Deref<Target=[A]>
-{
- fn eq(&self, other: &[B; 0]) -> bool {
- MyEq::eq(&**self, other)
- }
-}
-
-struct DerefWithHelper<H, T> {
- pub helper: H,
- pub marker: PhantomData<T>,
-}
-
-trait Helper<T> {
- fn helper_borrow(&self) -> &T;
-}
-
-impl<T> Helper<T> for Option<T> {
- fn helper_borrow(&self) -> &T {
- self.as_ref().unwrap()
- }
-}
-
-impl<T, H: Helper<T>> Deref for DerefWithHelper<H, T> {
- type Target = T;
-
- fn deref(&self) -> &T {
- self.helper.helper_borrow()
- }
-}
-
-pub fn check<T: MyEq>(x: T, y: T) -> bool {
- let d: DerefWithHelper<Option<T>, T> = DerefWithHelper { helper: Some(x),
- marker: PhantomData };
- d.eq(&y)
-}
-
-pub fn main() {
-}