]> git.proxmox.com Git - rustc.git/blame_incremental - 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
1//@ check-pass
2//@ aux-build: rpitit.rs
3
4#![feature(lint_reasons)]
5
6extern crate rpitit;
7
8use rpitit::{Foo, Foreign};
9use std::sync::Arc;
10
11// Implement an RPITIT from another crate.
12pub struct Local;
13impl Foo for Local {
14 #[expect(refining_impl_trait)]
15 fn bar(self) -> Arc<String> {
16 Arc::new(String::new())
17 }
18}
19
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)]
43 fn bar(self) -> Arc<String> {
44 Arc::new(String::new())
45 }
46}
47
48fn generic(f: impl Foo) {
49 let x = &*f.bar();
50}
51
52fn main() {
53 // Witness an RPITIT from another crate.
54 let &() = Foreign.bar();
55
56 let x: Arc<String> = Local.bar();
57 let x: Arc<String> = LocalOnlyRefiningA.bar();
58 let x: Arc<String> = LocalOnlyRefiningB.bar();
59 let x: Arc<String> = LocalOnlyRefiningC.bar();
60}