Skip to content

False positive for infinite_loop inside async block in function #14000

@jwodder

Description

@jwodder

Summary

The infinite_loop lint triggers on infinite loops inside async blocks inside functions that don't return !, even if the functions don't await those blocks.

Lint Name

infinite_loop

Reproducer

I tried this code:

pub fn install_ticker() { let mut schedule = tokio::time::interval(std::time::Duration::from_secs(5)); tokio::spawn({ async move { loop { schedule.tick().await; println!("Tick"); } } }); }

with this Cargo.toml:

[package] name = "loop-bug" version = "0.1.0" edition = "2021" [dependencies] tokio = { version = "1.43.0", features = ["rt", "time"] } [lints.clippy] infinite_loop = "deny"

When I ran cargo clippy, I saw this happen:

 Checking loop-bug v0.1.0 (/Users/jwodder/work/dev/tmp/loop-bug) error: infinite loop detected --> src/lib.rs:5:13 | 5 | / loop { 6 | | schedule.tick().await; 7 | | println!("Tick"); 8 | | } | |_____________^ | = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#infinite_loop = note: requested on the command line with `-D clippy::infinite-loop` help: if this is intentional, consider specifying `!` as function return | 1 | pub fn install_ticker() -> ! { | ++++ error: could not compile `loop-bug` (lib) due to 1 previous error 

I expected to see this happen: no errors

Version

rustc 1.84.0 (9fc6b4312 2025-01-07) binary: rustc commit-hash: 9fc6b43126469e3858e2fe86cafb4f0fd5068869 commit-date: 2025-01-07 host: x86_64-apple-darwin release: 1.84.0 LLVM version: 19.1.5 

Additional Labels

No response

Metadata

Metadata

Assignees

Labels

C-bugCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't have

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions