]> git.lizzy.rs Git - rust.git/blob - src/test/ui/traits/impl.rs
Rollup merge of #82179 - mbartlett21:patch-5, r=joshtriplett
[rust.git] / src / test / ui / traits / impl.rs
1 // run-pass
2 // Test calling methods on an impl for a bare trait.
3
4 // aux-build:traitimpl.rs
5
6 extern crate traitimpl;
7 use traitimpl::Bar;
8
9 static mut COUNT: usize = 1;
10
11 trait T {
12     fn t(&self) {}
13 }
14
15 impl<'a> dyn T+'a {
16     fn foo(&self) {
17         unsafe { COUNT *= 2; }
18     }
19     fn bar() {
20         unsafe { COUNT *= 3; }
21     }
22 }
23
24 impl T for isize {}
25
26 struct Foo;
27 impl<'a> Bar<'a> for Foo {}
28
29 fn main() {
30     let x: &dyn T = &42;
31
32     x.foo();
33     <dyn T>::foo(x);
34     <dyn T>::bar();
35
36     unsafe { assert_eq!(COUNT, 12); }
37
38     // Cross-crait case
39     let x: &dyn Bar = &Foo;
40     x.bar();
41 }