Check that impl self type matches up with expected self type in path mode

Fixes #3144.
This commit is contained in:
Florian Diebold
2020-02-14 21:08:25 +01:00
parent 1ead9ef13b
commit f47dc4de8d
3 changed files with 42 additions and 0 deletions

View File

@@ -963,6 +963,38 @@ fn test() { S2.into()<|>; }
assert_eq!(t, "{unknown}");
}
#[test]
fn method_resolution_overloaded_method() {
test_utils::covers!(impl_self_type_match_without_receiver);
let t = type_at(
r#"
//- main.rs
struct Wrapper<T>(T);
struct Foo<T>(T);
struct Bar<T>(T);
impl<T> Wrapper<Foo<T>> {
pub fn new(foo_: T) -> Self {
Wrapper(Foo(foo_))
}
}
impl<T> Wrapper<Bar<T>> {
pub fn new(bar_: T) -> Self {
Wrapper(Bar(bar_))
}
}
fn main() {
let a = Wrapper::<Foo<f32>>::new(1.0);
let b = Wrapper::<Bar<f32>>::new(1.0);
(a, b)<|>;
}
"#,
);
assert_eq!(t, "(Wrapper<Foo<f32>>, Wrapper<Bar<f32>>)")
}
#[test]
fn method_resolution_encountering_fn_type() {
type_at(