#![allow(unused, incomplete_features)] #![warn(clippy::large_stack_frames)] #![feature(unsized_locals)] use std::hint::black_box; fn generic<T: Default>() { let x = T::default(); black_box(&x); } fn unsized_local() { let x: dyn std::fmt::Display = *(Box::new(1) as Box<dyn std::fmt::Display>); black_box(&x); } struct ArrayDefault<const N: usize>([u8; N]); impl<const N: usize> Default for ArrayDefault<N> { fn default() -> Self { Self([0; N]) } } fn many_small_arrays() { //~^ ERROR: this function allocates a large amount of stack space //~| NOTE: allocating large amounts of stack space can overflow the stack let x = [0u8; 500_000]; let x2 = [0u8; 500_000]; let x3 = [0u8; 500_000]; let x4 = [0u8; 500_000]; let x5 = [0u8; 500_000]; black_box((&x, &x2, &x3, &x4, &x5)); } fn large_return_value() -> ArrayDefault<1_000_000> { //~^ ERROR: this function allocates a large amount of stack space //~| NOTE: allocating large amounts of stack space can overflow the stack Default::default() } fn large_fn_arg(x: ArrayDefault<1_000_000>) { //~^ ERROR: this function allocates a large amount of stack space //~| NOTE: allocating large amounts of stack space can overflow the stack black_box(&x); } fn main() { generic::<ArrayDefault<1_000_000>>(); }