]>
Commit | Line | Data |
---|---|---|
c620b35d FG |
1 | //@ check-pass |
2 | //@ aux-build: rpitit.rs | |
2b03887a | 3 | |
781aab86 FG |
4 | #![feature(lint_reasons)] |
5 | ||
2b03887a FG |
6 | extern crate rpitit; |
7 | ||
49aad941 | 8 | use rpitit::{Foo, Foreign}; |
353b0b11 FG |
9 | use std::sync::Arc; |
10 | ||
11 | // Implement an RPITIT from another crate. | |
781aab86 | 12 | pub struct Local; |
49aad941 | 13 | impl Foo for Local { |
781aab86 FG |
14 | #[expect(refining_impl_trait)] |
15 | fn bar(self) -> Arc<String> { | |
16 | Arc::new(String::new()) | |
17 | } | |
18 | } | |
19 | ||
e8be2606 FG |
20 | struct LocalOnlyRefiningA; |
21 | impl Foo for LocalOnlyRefiningA { | |
22 | #[warn(refining_impl_trait)] | |
23 | fn bar(self) -> Arc<String> { | |
24 | //~^ WARN impl method signature does not match trait method signature | |
25 | Arc::new(String::new()) | |
26 | } | |
27 | } | |
28 | ||
29 | struct LocalOnlyRefiningB; | |
30 | impl Foo for LocalOnlyRefiningB { | |
31 | #[warn(refining_impl_trait)] | |
32 | #[allow(refining_impl_trait_reachable)] | |
33 | fn bar(self) -> Arc<String> { | |
34 | //~^ WARN impl method signature does not match trait method signature | |
35 | Arc::new(String::new()) | |
36 | } | |
37 | } | |
38 | ||
39 | struct LocalOnlyRefiningC; | |
40 | impl Foo for LocalOnlyRefiningC { | |
41 | #[warn(refining_impl_trait)] | |
42 | #[allow(refining_impl_trait_internal)] | |
add651ee FG |
43 | fn bar(self) -> Arc<String> { |
44 | Arc::new(String::new()) | |
45 | } | |
353b0b11 FG |
46 | } |
47 | ||
fe692bf9 FG |
48 | fn generic(f: impl Foo) { |
49 | let x = &*f.bar(); | |
50 | } | |
51 | ||
2b03887a | 52 | fn main() { |
353b0b11 | 53 | // Witness an RPITIT from another crate. |
49aad941 | 54 | let &() = Foreign.bar(); |
353b0b11 | 55 | |
49aad941 | 56 | let x: Arc<String> = Local.bar(); |
e8be2606 FG |
57 | let x: Arc<String> = LocalOnlyRefiningA.bar(); |
58 | let x: Arc<String> = LocalOnlyRefiningB.bar(); | |
59 | let x: Arc<String> = LocalOnlyRefiningC.bar(); | |
2b03887a | 60 | } |