112 lines
2.9 KiB
Rust
112 lines
2.9 KiB
Rust
//@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];
|
|
}
|