| //@ edition: 2024 | 
 | //@ run-pass | 
 | #![feature(gen_blocks)] | 
 | #![feature(optimize_attribute)] | 
 | #![feature(stmt_expr_attributes)] | 
 | #![feature(async_iterator)] | 
 | #![allow(dead_code)] | 
 |  | 
 | // make sure that other attributes e.g. `optimize` can be applied to gen blocks and functions | 
 |  | 
 | fn main() { } | 
 |  | 
 | fn optimize_gen_block() -> impl Iterator<Item = ()> { | 
 |     #[optimize(speed)] | 
 |     gen { yield (); } | 
 | } | 
 |  | 
 | #[optimize(speed)] | 
 | gen fn optimize_gen_fn() -> i32 { | 
 |     yield 1; | 
 |     yield 2; | 
 |     yield 3; | 
 | } | 
 |  | 
 | #[optimize(speed)] | 
 | async gen fn optimize_async_gen_fn() -> i32 { | 
 |     yield 1; | 
 |     yield 2; | 
 |     yield 3; | 
 | } | 
 |  | 
 | use std::async_iter::AsyncIterator; | 
 |  | 
 | pub fn deduce() -> impl AsyncIterator<Item = ()> { | 
 |     #[optimize(size)] | 
 |     async gen { | 
 |         yield (); | 
 |     } | 
 | } |