]> git.proxmox.com Git - rustc.git/blame - tests/ui/impl-trait/in-trait/foreign.rs
bump version to 1.80.1+dfsg1-1~bpo12+pve1
[rustc.git] / tests / ui / impl-trait / in-trait / foreign.rs
CommitLineData
c620b35d
FG
1//@ check-pass
2//@ aux-build: rpitit.rs
2b03887a 3
781aab86
FG
4#![feature(lint_reasons)]
5
2b03887a
FG
6extern crate rpitit;
7
49aad941 8use rpitit::{Foo, Foreign};
353b0b11
FG
9use std::sync::Arc;
10
11// Implement an RPITIT from another crate.
781aab86 12pub struct Local;
49aad941 13impl 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
20struct LocalOnlyRefiningA;
21impl 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
29struct LocalOnlyRefiningB;
30impl 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
39struct LocalOnlyRefiningC;
40impl 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
48fn generic(f: impl Foo) {
49 let x = &*f.bar();
50}
51
2b03887a 52fn 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}