diff options
Diffstat (limited to 'crates/hir_ty/src/tests/regression.rs')
-rw-r--r-- | crates/hir_ty/src/tests/regression.rs | 98 |
1 files changed, 46 insertions, 52 deletions
diff --git a/crates/hir_ty/src/tests/regression.rs b/crates/hir_ty/src/tests/regression.rs index 1019e783b..abd9c385a 100644 --- a/crates/hir_ty/src/tests/regression.rs +++ b/crates/hir_ty/src/tests/regression.rs | |||
@@ -927,35 +927,33 @@ fn issue_6628() { | |||
927 | fn issue_6852() { | 927 | fn issue_6852() { |
928 | check_infer( | 928 | check_infer( |
929 | r#" | 929 | r#" |
930 | #[lang = "deref"] | 930 | //- minicore: deref |
931 | pub trait Deref { | 931 | use core::ops::Deref; |
932 | type Target; | ||
933 | } | ||
934 | 932 | ||
935 | struct BufWriter {} | 933 | struct BufWriter {} |
936 | 934 | ||
937 | struct Mutex<T> {} | 935 | struct Mutex<T> {} |
938 | struct MutexGuard<'a, T> {} | 936 | struct MutexGuard<'a, T> {} |
939 | impl<T> Mutex<T> { | 937 | impl<T> Mutex<T> { |
940 | fn lock(&self) -> MutexGuard<'_, T> {} | 938 | fn lock(&self) -> MutexGuard<'_, T> {} |
941 | } | 939 | } |
942 | impl<'a, T: 'a> Deref for MutexGuard<'a, T> { | 940 | impl<'a, T: 'a> Deref for MutexGuard<'a, T> { |
943 | type Target = T; | 941 | type Target = T; |
944 | } | 942 | } |
945 | fn flush(&self) { | 943 | fn flush(&self) { |
946 | let w: &Mutex<BufWriter>; | 944 | let w: &Mutex<BufWriter>; |
947 | *(w.lock()); | 945 | *(w.lock()); |
948 | } | 946 | } |
949 | "#, | 947 | "#, |
950 | expect![[r#" | 948 | expect![[r#" |
951 | 156..160 'self': &Mutex<T> | 949 | 123..127 'self': &Mutex<T> |
952 | 183..185 '{}': () | 950 | 150..152 '{}': () |
953 | 267..271 'self': &{unknown} | 951 | 234..238 'self': &{unknown} |
954 | 273..323 '{ ...()); }': () | 952 | 240..290 '{ ...()); }': () |
955 | 283..284 'w': &Mutex<BufWriter> | 953 | 250..251 'w': &Mutex<BufWriter> |
956 | 309..320 '*(w.lock())': BufWriter | 954 | 276..287 '*(w.lock())': BufWriter |
957 | 311..312 'w': &Mutex<BufWriter> | 955 | 278..279 'w': &Mutex<BufWriter> |
958 | 311..319 'w.lock()': MutexGuard<BufWriter> | 956 | 278..286 'w.lock()': MutexGuard<BufWriter> |
959 | "#]], | 957 | "#]], |
960 | ); | 958 | ); |
961 | } | 959 | } |
@@ -977,37 +975,33 @@ fn param_overrides_fn() { | |||
977 | fn lifetime_from_chalk_during_deref() { | 975 | fn lifetime_from_chalk_during_deref() { |
978 | check_types( | 976 | check_types( |
979 | r#" | 977 | r#" |
980 | #[lang = "deref"] | 978 | //- minicore: deref |
981 | pub trait Deref { | 979 | struct Box<T: ?Sized> {} |
982 | type Target; | 980 | impl<T> core::ops::Deref for Box<T> { |
983 | } | 981 | type Target = T; |
984 | |||
985 | struct Box<T: ?Sized> {} | ||
986 | impl<T> Deref for Box<T> { | ||
987 | type Target = T; | ||
988 | 982 | ||
989 | fn deref(&self) -> &Self::Target { | 983 | fn deref(&self) -> &Self::Target { |
990 | loop {} | 984 | loop {} |
991 | } | 985 | } |
992 | } | 986 | } |
993 | 987 | ||
994 | trait Iterator { | 988 | trait Iterator { |
995 | type Item; | 989 | type Item; |
996 | } | 990 | } |
997 | 991 | ||
998 | pub struct Iter<'a, T: 'a> { | 992 | pub struct Iter<'a, T: 'a> { |
999 | inner: Box<dyn IterTrait<'a, T, Item = &'a T> + 'a>, | 993 | inner: Box<dyn IterTrait<'a, T, Item = &'a T> + 'a>, |
1000 | } | 994 | } |
1001 | 995 | ||
1002 | trait IterTrait<'a, T: 'a>: Iterator<Item = &'a T> { | 996 | trait IterTrait<'a, T: 'a>: Iterator<Item = &'a T> { |
1003 | fn clone_box(&self); | 997 | fn clone_box(&self); |
1004 | } | 998 | } |
1005 | 999 | ||
1006 | fn clone_iter<T>(s: Iter<T>) { | 1000 | fn clone_iter<T>(s: Iter<T>) { |
1007 | s.inner.clone_box(); | 1001 | s.inner.clone_box(); |
1008 | //^^^^^^^^^^^^^^^^^^^ () | 1002 | //^^^^^^^^^^^^^^^^^^^ () |
1009 | } | 1003 | } |
1010 | "#, | 1004 | "#, |
1011 | ) | 1005 | ) |
1012 | } | 1006 | } |
1013 | 1007 | ||