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 @@ -92,10 +92,16 @@ impl<'tcx> LateLintPass<'tcx> for AsyncFnInTrait {
9292 if let hir:: TraitItemKind :: Fn ( sig, body) = item. kind
9393 && let hir:: IsAsync :: Async ( async_span) = sig. header . asyncness
9494 {
95+ // RTN can be used to bound `async fn` in traits in a better way than "always"
9596 if cx. tcx . features ( ) . return_type_notation {
9697 return ;
9798 }
9899
100+ // Only need to think about library implications of reachable traits
101+ if !cx. tcx . effective_visibilities ( ( ) ) . is_reachable ( item. owner_id . def_id ) {
102+ return ;
103+ }
104+
99105 let hir:: FnRetTy :: Return ( hir:: Ty { kind : hir:: TyKind :: OpaqueDef ( def, ..) , .. } ) =
100106 sig. decl . output
101107 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