]> git.lizzy.rs Git - rust.git/blob - tests/ui/ufcs/ufcs-explicit-self-bad.rs
Rollup merge of #106766 - GuillaumeGomez:rm-stripper-dead-code, r=notriddle
[rust.git] / tests / ui / ufcs / ufcs-explicit-self-bad.rs
1 struct Foo {
2     f: isize,
3 }
4
5
6
7 impl Foo {
8     fn foo(self: isize, x: isize) -> isize {
9         //~^ ERROR invalid `self` parameter type
10         self.f + x
11     }
12 }
13
14 struct Bar<T> {
15     f: T,
16 }
17
18 impl<T> Bar<T> {
19     fn foo(self: Bar<isize>, x: isize) -> isize {
20         //~^ ERROR invalid `self` parameter type
21         x
22     }
23     fn bar(self: &Bar<usize>, x: isize) -> isize {
24         //~^ ERROR invalid `self` parameter type
25         x
26     }
27 }
28
29 trait SomeTrait {
30     fn dummy1(&self);
31     fn dummy2(&self);
32     fn dummy3(&self);
33 }
34
35 impl<'a, T> SomeTrait for &'a Bar<T> {
36     fn dummy1(self: &&'a Bar<T>) { }
37     fn dummy2(self: &Bar<T>) {} //~ ERROR mismatched `self` parameter type
38     //~^ ERROR mismatched `self` parameter type
39     fn dummy3(self: &&Bar<T>) {}
40     //~^ ERROR mismatched `self` parameter type
41     //~| expected reference `&'a Bar<T>`
42     //~| found reference `&Bar<T>`
43     //~| lifetime mismatch
44     //~| ERROR mismatched `self` parameter type
45     //~| expected reference `&'a Bar<T>`
46     //~| found reference `&Bar<T>`
47     //~| lifetime mismatch
48 }
49
50 fn main() {
51     let foo = Box::new(Foo {
52         f: 1,
53     });
54     println!("{}", foo.foo(2));
55     let bar = Box::new(Bar {
56         f: 1,
57     });
58     println!("{} {}", bar.foo(2), bar.bar(2));
59 }