#![feature(generators)] #![warn(clippy::large_futures)] #![allow(clippy::never_loop)] #![allow(clippy::future_not_send)] #![allow(clippy::manual_async_fn)] async fn big_fut(_arg: [u8; 1024 * 16]) {} async fn wait() { let f = async { Box::pin(big_fut([0u8; 1024 * 16])).await; //~^ ERROR: large future with a size of 16385 bytes //~| NOTE: `-D clippy::large-futures` implied by `-D warnings` }; Box::pin(f).await //~^ ERROR: large future with a size of 16386 bytes } async fn calls_fut(fut: impl std::future::Future) { loop { Box::pin(wait()).await; //~^ ERROR: large future with a size of 16387 bytes if true { return fut.await; } else { Box::pin(wait()).await; //~^ ERROR: large future with a size of 16387 bytes } } } pub async fn test() { let fut = big_fut([0u8; 1024 * 16]); Box::pin(foo()).await; //~^ ERROR: large future with a size of 65540 bytes Box::pin(calls_fut(fut)).await; //~^ ERROR: large future with a size of 49159 bytes } pub fn foo() -> impl std::future::Future { async { let x = [0i32; 1024 * 16]; async {}.await; dbg!(x); } } pub async fn lines() { Box::pin(async { //~^ ERROR: large future with a size of 65540 bytes let x = [0i32; 1024 * 16]; async {}.await; println!("{:?}", x); }) .await; } pub async fn macro_expn() { macro_rules! macro_ { () => { Box::pin(async { let x = [0i32; 1024 * 16]; async {}.await; println!("macro: {:?}", x); }) }; } macro_!().await } fn main() {}