File tree Expand file tree Collapse file tree 2 files changed +20
-2
lines changed
tests/ui/async-await/in-trait Expand file tree Collapse file tree 2 files changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -93,10 +93,16 @@ impl<'tcx> LateLintPass<'tcx> for AsyncFnInTrait {
9393 if let hir:: TraitItemKind :: Fn ( sig, body) = item. kind
9494 && let hir:: IsAsync :: Async ( async_span) = sig. header . asyncness
9595 {
96+ // RTN can be used to bound `async fn` in traits in a better way than "always"
9697 if cx. tcx . features ( ) . return_type_notation {
9798 return ;
9899 }
99100
101+ // Only need to think about library implications of reachable traits
102+ if !cx. tcx . effective_visibilities ( ( ) ) . is_reachable ( item. owner_id . def_id ) {
103+ return ;
104+ }
105+
100106 let hir:: FnRetTy :: Return ( hir:: Ty { kind : hir:: TyKind :: OpaqueDef ( def, ..) , .. } ) =
101107 sig. decl . output
102108 else {
Original file line number Diff line number Diff line change 33#![ feature( async_fn_in_trait) ]
44#![ deny( async_fn_in_trait) ]
55
6- trait Foo {
6+ pub trait Foo {
77 async fn not_send ( ) ;
8- //~^ ERROR
8+ //~^ ERROR use of `async fn` in public traits is discouraged
9+ }
10+
11+ mod private {
12+ pub trait FooUnreachable {
13+ async fn not_send ( ) ;
14+ // No warning
15+ }
16+ }
17+
18+ pub ( crate ) trait FooCrate {
19+ async fn not_send ( ) ;
20+ // No warning
921}
1022
1123fn main ( ) { }
You can’t perform that action at this time.
0 commit comments