File tree 2 files changed +27
-0
lines changed
2 files changed +27
-0
lines changed Original file line number Diff line number Diff line change @@ -129,6 +129,8 @@ pub(crate) fn try_join(input: TokenStream) -> TokenStream {
129
129
} else if unsafe { #futures_crate:: core_reexport:: pin:: Pin :: new_unchecked( & mut #fut) } . output_mut( ) . unwrap( ) . is_err( ) {
130
130
// `.err().unwrap()` rather than `.unwrap_err()` so that we don't introduce
131
131
// a `T: Debug` bound.
132
+ // Also, for an error type of ! any code after `err().unwrap()` is unreachable.
133
+ #[ allow( unreachable_code) ]
132
134
return #futures_crate:: core_reexport:: task:: Poll :: Ready (
133
135
#futures_crate:: core_reexport:: result:: Result :: Err (
134
136
unsafe { #futures_crate:: core_reexport:: pin:: Pin :: new_unchecked( & mut #fut) } . take_output( ) . unwrap( ) . err( ) . unwrap( )
@@ -141,6 +143,8 @@ pub(crate) fn try_join(input: TokenStream) -> TokenStream {
141
143
quote ! {
142
144
// `.ok().unwrap()` rather than `.unwrap()` so that we don't introduce
143
145
// an `E: Debug` bound.
146
+ // Also, for an ok type of ! any code after `ok().unwrap()` is unreachable.
147
+ #[ allow( unreachable_code) ]
144
148
unsafe { #futures_crate:: core_reexport:: pin:: Pin :: new_unchecked( & mut #fut) } . take_output( ) . unwrap( ) . ok( ) . unwrap( ) ,
145
149
}
146
150
} ) ;
Original file line number Diff line number Diff line change
1
+ #![ deny( unreachable_code) ]
2
+
3
+ use futures:: { try_join, executor:: block_on} ;
4
+
5
+ #[ test]
6
+ fn try_join_never_error ( ) {
7
+ block_on ( async {
8
+ let future1 = async { Ok :: < ( ) , !> ( ( ) ) } ;
9
+ let future2 = async { Ok :: < ( ) , !> ( ( ) ) } ;
10
+ try_join ! ( future1, future2)
11
+ } )
12
+ . unwrap ( ) ;
13
+ }
14
+
15
+ #[ test]
16
+ fn try_join_never_ok ( ) {
17
+ block_on ( async {
18
+ let future1 = async { Err :: < !, ( ) > ( ( ) ) } ;
19
+ let future2 = async { Err :: < !, ( ) > ( ( ) ) } ;
20
+ try_join ! ( future1, future2)
21
+ } )
22
+ . unwrap_err ( ) ;
23
+ }
You can’t perform that action at this time.
0 commit comments