| //@aux-build:proc_macros.rs |
| #![warn(clippy::large_stack_arrays)] |
| #![allow(clippy::large_enum_variant)] |
| |
| extern crate proc_macros; |
| |
| #[derive(Clone, Copy)] |
| struct S { |
| pub data: [u64; 32], |
| } |
| |
| #[derive(Clone, Copy)] |
| enum E { |
| S(S), |
| T(u32), |
| } |
| |
| const STATIC_PROMOTED_LARGE_ARRAY: &[u8; 512001] = &[0; 512001]; |
| const STATIC_PROMOTED_LARGE_ARRAY_WITH_NESTED: &[u8; 512001] = { |
| const NESTED: () = (); |
| &[0; 512001] |
| }; |
| |
| pub static DOESNOTLINT: [u8; 512_001] = [0; 512_001]; |
| pub static DOESNOTLINT2: [u8; 512_001] = { |
| let x = 0; |
| [x; 512_001] |
| }; |
| |
| fn issue_10741() { |
| #[derive(Copy, Clone)] |
| struct Large([u32; 2048]); |
| |
| fn build() -> Large { |
| Large([0; 2048]) |
| } |
| |
| let _x = [build(); 3]; |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| |
| let _y = [build(), build(), build()]; |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| } |
| |
| fn main() { |
| let bad = ( |
| [0u32; 20_000_000], |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| [S { data: [0; 32] }; 5000], |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| [Some(""); 20_000_000], |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| [E::T(0); 5000], |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| [0u8; usize::MAX], |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| ); |
| |
| let good = ( |
| [0u32; 50], |
| [S { data: [0; 32] }; 4], |
| [Some(""); 50], |
| [E::T(0); 2], |
| [(); 20_000_000], |
| ); |
| } |
| |
| #[allow(clippy::useless_vec)] |
| fn issue_12586() { |
| macro_rules! dummy { |
| ($n:expr) => { |
| $n |
| }; |
| // Weird rule to test help messages. |
| ($a:expr => $b:expr) => { |
| [$a, $b, $a, $b] |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| }; |
| ($id:ident; $n:literal) => { |
| dummy!(::std::vec![$id;$n]) |
| }; |
| ($($id:expr),+ $(,)?) => { |
| ::std::vec![$($id),*] |
| } |
| } |
| macro_rules! create_then_move { |
| ($id:ident; $n:literal) => {{ |
| let _x_ = [$id; $n]; |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| _x_ |
| }}; |
| } |
| |
| let x = [0u32; 4096]; |
| let y = vec![x, x, x, x, x]; |
| let y = vec![dummy![x, x, x, x, x]]; |
| let y = vec![dummy![[x, x, x, x, x]]]; |
| let y = dummy![x, x, x, x, x]; |
| let y = [x, x, dummy!(x), x, x]; |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| let y = dummy![x => x]; |
| let y = dummy![x;5]; |
| let y = dummy!(vec![dummy![x, x, x, x, x]]); |
| let y = dummy![[x, x, x, x, x]]; |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| |
| let y = proc_macros::make_it_big!([x; 1]); |
| //~^ ERROR: allocating a local array larger than 16384 bytes |
| let y = vec![proc_macros::make_it_big!([x; 10])]; |
| let y = vec![create_then_move![x; 5]; 5]; |
| } |