diff --git a/tokio/src/macros/select.rs b/tokio/src/macros/select.rs index 52c8fdd3404..6497a510e98 100644 --- a/tokio/src/macros/select.rs +++ b/tokio/src/macros/select.rs @@ -366,6 +366,7 @@ macro_rules! select { } match branch { $( + #[allow(unreachable_code)] $crate::count!( $($skip)* ) => { // First, if the future has previously been // disabled, do not poll it again. This is done diff --git a/tokio/tests/macros_select.rs b/tokio/tests/macros_select.rs index 6f027f3bdfc..2ebc4efc1ac 100644 --- a/tokio/tests/macros_select.rs +++ b/tokio/tests/macros_select.rs @@ -440,9 +440,25 @@ async fn many_branches() { assert_eq!(1, num); } +#[tokio::test] +async fn never_branch_no_warnings() { + let t = tokio::select! { + _ = async_never() => 0, + one_async_ready = one() => one_async_ready, + }; + assert_eq!(t, 1); +} + async fn one() -> usize { 1 } async fn require_mutable(_: &mut i32) {} async fn async_noop() {} + +async fn async_never() -> ! { + use tokio::time::Duration; + loop { + tokio::time::delay_for(Duration::from_millis(10)).await; + } +}