diff options
Diffstat (limited to 'crates/hir_ty')
-rw-r--r-- | crates/hir_ty/Cargo.toml | 6 | ||||
-rw-r--r-- | crates/hir_ty/src/tests/method_resolution.rs | 45 |
2 files changed, 48 insertions, 3 deletions
diff --git a/crates/hir_ty/Cargo.toml b/crates/hir_ty/Cargo.toml index 418ac8cbb..6ef9d1e7e 100644 --- a/crates/hir_ty/Cargo.toml +++ b/crates/hir_ty/Cargo.toml | |||
@@ -17,9 +17,9 @@ ena = "0.14.0" | |||
17 | log = "0.4.8" | 17 | log = "0.4.8" |
18 | rustc-hash = "1.1.0" | 18 | rustc-hash = "1.1.0" |
19 | scoped-tls = "1" | 19 | scoped-tls = "1" |
20 | chalk-solve = { version = "0.56", default-features = false } | 20 | chalk-solve = { version = "0.58", default-features = false } |
21 | chalk-ir = "0.56" | 21 | chalk-ir = "0.58" |
22 | chalk-recursive = "0.56" | 22 | chalk-recursive = "0.58" |
23 | la-arena = { version = "0.2.0", path = "../../lib/arena" } | 23 | la-arena = { version = "0.2.0", path = "../../lib/arena" } |
24 | 24 | ||
25 | stdx = { path = "../stdx", version = "0.0.0" } | 25 | stdx = { path = "../stdx", version = "0.0.0" } |
diff --git a/crates/hir_ty/src/tests/method_resolution.rs b/crates/hir_ty/src/tests/method_resolution.rs index 659b8fce9..a9901d7b8 100644 --- a/crates/hir_ty/src/tests/method_resolution.rs +++ b/crates/hir_ty/src/tests/method_resolution.rs | |||
@@ -956,6 +956,51 @@ fn test() { foo.call(); } | |||
956 | } | 956 | } |
957 | 957 | ||
958 | #[test] | 958 | #[test] |
959 | fn super_trait_impl_return_trait_method_resolution() { | ||
960 | check_infer( | ||
961 | r#" | ||
962 | trait Base { | ||
963 | fn foo(self) -> usize; | ||
964 | } | ||
965 | |||
966 | trait Super : Base {} | ||
967 | |||
968 | fn base1() -> impl Base { loop {} } | ||
969 | fn super1() -> impl Super { loop {} } | ||
970 | |||
971 | fn test(base2: impl Base, super2: impl Super) { | ||
972 | base1().foo(); | ||
973 | super1().foo(); | ||
974 | base2.foo(); | ||
975 | super2.foo(); | ||
976 | } | ||
977 | "#, | ||
978 | expect![[r#" | ||
979 | 24..28 'self': Self | ||
980 | 90..101 '{ loop {} }': ! | ||
981 | 92..99 'loop {}': ! | ||
982 | 97..99 '{}': () | ||
983 | 128..139 '{ loop {} }': ! | ||
984 | 130..137 'loop {}': ! | ||
985 | 135..137 '{}': () | ||
986 | 149..154 'base2': impl Base | ||
987 | 167..173 'super2': impl Super | ||
988 | 187..264 '{ ...o(); }': () | ||
989 | 193..198 'base1': fn base1() -> impl Base | ||
990 | 193..200 'base1()': impl Base | ||
991 | 193..206 'base1().foo()': usize | ||
992 | 212..218 'super1': fn super1() -> impl Super | ||
993 | 212..220 'super1()': impl Super | ||
994 | 212..226 'super1().foo()': usize | ||
995 | 232..237 'base2': impl Base | ||
996 | 232..243 'base2.foo()': usize | ||
997 | 249..255 'super2': impl Super | ||
998 | 249..261 'super2.foo()': usize | ||
999 | "#]], | ||
1000 | ); | ||
1001 | } | ||
1002 | |||
1003 | #[test] | ||
959 | fn method_resolution_non_parameter_type() { | 1004 | fn method_resolution_non_parameter_type() { |
960 | check_types( | 1005 | check_types( |
961 | r#" | 1006 | r#" |