[][src]Static rustc_ap_rustc_session::lint::builtin::CONST_ERR

pub static  CONST_ERR: &Lint

The const_err lint detects an erroneous expression while doing constant evaluation.

Example

This example deliberately fails to compile
#![allow(unconditional_panic)]
let x: &'static i32 = &(1 / 0);

{{produces}}

Explanation

This lint detects code that is very likely incorrect. If this lint is allowed, then the code will not be evaluated at compile-time, and instead continue to generate code to evaluate at runtime, which may panic during runtime.

Note that this lint may trigger in either inside or outside of a const context. Outside of a const context, the compiler can sometimes evaluate an expression at compile-time in order to generate more efficient code. As the compiler becomes better at doing this, it needs to decide what to do when it encounters code that it knows for certain will panic or is otherwise incorrect. Making this a hard error would prevent existing code that exhibited this behavior from compiling, breaking backwards-compatibility. However, this is almost certainly incorrect code, so this is a deny-by-default lint. For more details, see RFC 1229 and issue #28238.

Note that there are several other more specific lints associated with compile-time evaluation, such as arithmetic_overflow, unconditional_panic.