// compile-flags: -Zdeduplicate-diagnostics=yes use std::mem::size_of; fn test() {} fn ok() -> [u8; M] { [0; { M }] } struct Break0([u8; { N + 1 }]); //~^ ERROR generic parameters may not be used in const operations struct Break1([u8; { { N } }]); //~^ ERROR generic parameters may not be used in const operations fn break2() { let _: [u8; N + 1]; //~^ ERROR generic parameters may not be used in const operations } fn break3() { let _ = [0; N + 1]; //~^ ERROR generic parameters may not be used in const operations } struct BreakTy0(T, [u8; { size_of::<*mut T>() }]); //~^ ERROR generic parameters may not be used in const operations struct BreakTy1(T, [u8; { { size_of::<*mut T>() } }]); //~^ ERROR generic parameters may not be used in const operations fn break_ty2() { let _: [u8; size_of::<*mut T>() + 1]; //~^ ERROR generic parameters may not be used in const operations } fn break_ty3() { let _ = [0; size_of::<*mut T>() + 1]; //~^ WARN cannot use constants which depend on generic parameters in types //~| WARN this was previously accepted by the compiler but is being phased out } trait Foo { const ASSOC: usize; } fn main() {}