Make the const_err lint deny-by-default

This commit is contained in:
Oliver Schneider 2018-05-11 14:33:37 +02:00
parent 41707d8df9
commit 1788af357a
No known key found for this signature in database
GPG Key ID: 1D5CB4FC597C3004
28 changed files with 95 additions and 58 deletions

View File

@ -27,7 +27,7 @@ declare_lint! {
declare_lint! {
pub CONST_ERR,
Warn,
Deny,
"constant evaluation detected erroneous expression"
}

View File

@ -10,9 +10,8 @@
const A: &'static [i32] = &[];
const B: i32 = (&A)[1];
//~^ ERROR constant evaluation error
//~| index out of bounds: the len is 0 but the index is 1
//~| WARN this constant cannot be used
//~^ index out of bounds: the len is 0 but the index is 1
//~| ERROR this constant cannot be used
fn main() {
let _ = B;

View File

@ -10,9 +10,8 @@
const A: [i32; 0] = [];
const B: i32 = A[1];
//~^ ERROR constant evaluation error
//~| index out of bounds: the len is 0 but the index is 1
//~| WARN this constant cannot be used
//~^ index out of bounds: the len is 0 but the index is 1
//~| ERROR this constant cannot be used
fn main() {
let _ = B;

View File

@ -12,9 +12,8 @@
const FOO: &'static[u32] = &[1, 2, 3];
const BAR: u32 = FOO[5];
//~^ ERROR constant evaluation error [E0080]
//~| index out of bounds: the len is 3 but the index is 5
//~| WARN this constant cannot be used
//~^ index out of bounds: the len is 3 but the index is 5
//~| ERROR this constant cannot be used
fn main() {
let _ = BAR;

View File

@ -12,11 +12,11 @@ enum Test {
DivZero = 1/0,
//~^ attempt to divide by zero
//~| ERROR constant evaluation error
//~| WARN constant evaluation error
//~| ERROR constant evaluation error
RemZero = 1%0,
//~^ attempt to calculate the remainder with a divisor of zero
//~| ERROR constant evaluation error
//~| WARN constant evaluation error
//~| ERROR constant evaluation error
}
fn main() {}

View File

@ -13,6 +13,7 @@
// compile-pass
#![allow(warnings)]
#![warn(const_err)]
fn main() {
255u8 + 1; //~ WARNING this expression will panic at run-time

View File

@ -11,6 +11,8 @@
// error-pattern:thread 'main' panicked at 'attempt to add with overflow'
// compile-flags: -C debug-assertions
#![allow(const_err)]
fn main() {
let _x = 200u8 + 200u8 + 200u8;
}

View File

@ -11,6 +11,8 @@
// error-pattern:thread 'main' panicked at 'attempt to multiply with overflow'
// compile-flags: -C debug-assertions
#![allow(const_err)]
fn main() {
let x = 200u8 * 4;
}

View File

@ -11,6 +11,8 @@
// error-pattern:thread 'main' panicked at 'attempt to negate with overflow'
// compile-flags: -C debug-assertions
#![allow(const_err)]
fn main() {
let _x = -std::i8::MIN;
}

View File

@ -11,6 +11,8 @@
// error-pattern:thread 'main' panicked at 'attempt to subtract with overflow'
// compile-flags: -C debug-assertions
#![allow(const_err)]
fn main() {
let _x = 42u8 - (42u8 + 1);
}

View File

@ -11,7 +11,7 @@
// Evaluation of constants in refutable patterns goes through
// different compiler control-flow paths.
#![allow(unused_imports, warnings)]
#![allow(unused_imports, warnings, const_err)]
use std::fmt;
use std::{i8, i16, i32, i64, isize};

View File

@ -22,7 +22,7 @@ use std::{u8, u16, u32, u64, usize};
const A_I8_T
: [u32; (i8::MAX as i8 + 1i8) as usize]
//~^ ERROR E0080
//~| WARN attempt to add with overflow
//~| ERROR attempt to add with overflow
= [0; (i8::MAX as usize) + 1];
fn main() {

View File

@ -1,10 +1,10 @@
warning: attempt to add with overflow
error: attempt to add with overflow
--> $DIR/const-eval-overflow-4.rs:23:13
|
LL | : [u32; (i8::MAX as i8 + 1i8) as usize]
| ^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(const_err)] on by default
= note: #[deny(const_err)] on by default
error[E0080]: constant evaluation error
--> $DIR/const-eval-overflow-4.rs:23:13
@ -12,6 +12,6 @@ error[E0080]: constant evaluation error
LL | : [u32; (i8::MAX as i8 + 1i8) as usize]
| ^^^^^^^^^^^^^^^^^^^^^ attempt to add with overflow
error: aborting due to previous error
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0080`.

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-pass
#![warn(const_err)]
const X: u32 = 5;
const Y: u32 = 6;

View File

@ -1,19 +1,23 @@
warning: attempt to subtract with overflow
--> $DIR/conditional_array_execution.rs:15:19
--> $DIR/conditional_array_execution.rs:16:19
|
LL | const FOO: u32 = [X - Y, Y - X][(X < Y) as usize];
| ^^^^^
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/conditional_array_execution.rs:12:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: this constant cannot be used
--> $DIR/conditional_array_execution.rs:15:1
--> $DIR/conditional_array_execution.rs:16:1
|
LL | const FOO: u32 = [X - Y, Y - X][(X < Y) as usize];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ attempt to subtract with overflow
warning: constant evaluation error
--> $DIR/conditional_array_execution.rs:20:20
--> $DIR/conditional_array_execution.rs:21:20
|
LL | println!("{}", FOO);
| ^^^ referenced constant has errors

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-pass
#![warn(const_err)]
#![feature(const_fn)]

View File

@ -1,37 +1,41 @@
warning: attempt to subtract with overflow
--> $DIR/issue-43197.rs:20:20
--> $DIR/issue-43197.rs:21:20
|
LL | const X: u32 = 0-1;
| ^^^
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/issue-43197.rs:12:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: this constant cannot be used
--> $DIR/issue-43197.rs:20:5
--> $DIR/issue-43197.rs:21:5
|
LL | const X: u32 = 0-1;
| ^^^^^^^^^^^^^^^^^^^ attempt to subtract with overflow
warning: attempt to subtract with overflow
--> $DIR/issue-43197.rs:23:24
--> $DIR/issue-43197.rs:24:24
|
LL | const Y: u32 = foo(0-1);
| ^^^
warning: this constant cannot be used
--> $DIR/issue-43197.rs:23:5
--> $DIR/issue-43197.rs:24:5
|
LL | const Y: u32 = foo(0-1);
| ^^^^^^^^^^^^^^^^^^^^^^^^ attempt to subtract with overflow
warning: constant evaluation error
--> $DIR/issue-43197.rs:26:23
--> $DIR/issue-43197.rs:27:23
|
LL | println!("{} {}", X, Y);
| ^ referenced constant has errors
warning: constant evaluation error
--> $DIR/issue-43197.rs:26:26
--> $DIR/issue-43197.rs:27:26
|
LL | println!("{} {}", X, Y);
| ^ referenced constant has errors

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-pass
#![warn(const_err)]
trait Foo {
const AMT: usize;

View File

@ -1,13 +1,17 @@
warning: constant evaluation error
--> $DIR/issue-44578.rs:35:20
--> $DIR/issue-44578.rs:36:20
|
LL | println!("{}", <Bar<u16, u8> as Foo>::AMT); //~ WARN const_err
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/issue-44578.rs:12:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: constant evaluation error
--> $DIR/issue-44578.rs:35:20
--> $DIR/issue-44578.rs:36:20
|
LL | println!("{}", <Bar<u16, u8> as Foo>::AMT); //~ WARN const_err
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors

View File

@ -8,6 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![warn(const_err)]
// compile-pass
// compile-flags: -O
fn main() {

View File

@ -1,49 +1,53 @@
warning: constant evaluation error
--> $DIR/promoted_errors.rs:14:20
--> $DIR/promoted_errors.rs:16:20
|
LL | println!("{}", 0u32 - 1);
| ^^^^^^^^ attempt to subtract with overflow
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/promoted_errors.rs:11:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: constant evaluation error
--> $DIR/promoted_errors.rs:14:20
--> $DIR/promoted_errors.rs:16:20
|
LL | println!("{}", 0u32 - 1);
| ^^^^^^^^ attempt to subtract with overflow
warning: constant evaluation error
--> $DIR/promoted_errors.rs:17:14
--> $DIR/promoted_errors.rs:19:14
|
LL | let _x = 0u32 - 1;
| ^^^^^^^^ attempt to subtract with overflow
warning: attempt to divide by zero
--> $DIR/promoted_errors.rs:19:20
--> $DIR/promoted_errors.rs:21:20
|
LL | println!("{}", 1/(1-1));
| ^^^^^^^
warning: constant evaluation error
--> $DIR/promoted_errors.rs:19:20
--> $DIR/promoted_errors.rs:21:20
|
LL | println!("{}", 1/(1-1));
| ^^^^^^^ attempt to divide by zero
warning: attempt to divide by zero
--> $DIR/promoted_errors.rs:22:14
--> $DIR/promoted_errors.rs:24:14
|
LL | let _x = 1/(1-1);
| ^^^^^^^
warning: constant evaluation error
--> $DIR/promoted_errors.rs:22:14
--> $DIR/promoted_errors.rs:24:14
|
LL | let _x = 1/(1-1);
| ^^^^^^^ attempt to divide by zero
warning: constant evaluation error
--> $DIR/promoted_errors.rs:25:20
--> $DIR/promoted_errors.rs:27:20
|
LL | println!("{}", 1/(false as u32));
| ^^^^^^^^^^^^^^^^ attempt to divide by zero

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-pass
#![warn(const_err)]
#![crate_type = "lib"]

View File

@ -1,25 +1,29 @@
warning: attempt to subtract with overflow
--> $DIR/pub_const_err.rs:15:20
--> $DIR/pub_const_err.rs:16:20
|
LL | pub const Z: u32 = 0 - 1;
| ^^^^^
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/pub_const_err.rs:12:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: this constant cannot be used
--> $DIR/pub_const_err.rs:15:1
--> $DIR/pub_const_err.rs:16:1
|
LL | pub const Z: u32 = 0 - 1;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ attempt to subtract with overflow
warning: attempt to subtract with overflow
--> $DIR/pub_const_err.rs:19:22
--> $DIR/pub_const_err.rs:20:22
|
LL | pub type Foo = [i32; 0 - 1];
| ^^^^^
warning: this array length cannot be used
--> $DIR/pub_const_err.rs:19:22
--> $DIR/pub_const_err.rs:20:22
|
LL | pub type Foo = [i32; 0 - 1];
| ^^^^^ attempt to subtract with overflow

View File

@ -9,6 +9,7 @@
// except according to those terms.
// compile-pass
#![warn(const_err)]
pub const Z: u32 = 0 - 1;
//~^ WARN attempt to subtract with overflow

View File

@ -1,25 +1,29 @@
warning: attempt to subtract with overflow
--> $DIR/pub_const_err_bin.rs:13:20
--> $DIR/pub_const_err_bin.rs:14:20
|
LL | pub const Z: u32 = 0 - 1;
| ^^^^^
|
= note: #[warn(const_err)] on by default
note: lint level defined here
--> $DIR/pub_const_err_bin.rs:12:9
|
LL | #![warn(const_err)]
| ^^^^^^^^^
warning: this constant cannot be used
--> $DIR/pub_const_err_bin.rs:13:1
--> $DIR/pub_const_err_bin.rs:14:1
|
LL | pub const Z: u32 = 0 - 1;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ attempt to subtract with overflow
warning: attempt to subtract with overflow
--> $DIR/pub_const_err_bin.rs:17:22
--> $DIR/pub_const_err_bin.rs:18:22
|
LL | pub type Foo = [i32; 0 - 1];
| ^^^^^
warning: this array length cannot be used
--> $DIR/pub_const_err_bin.rs:17:22
--> $DIR/pub_const_err_bin.rs:18:22
|
LL | pub type Foo = [i32; 0 - 1];
| ^^^^^ attempt to subtract with overflow

View File

@ -16,7 +16,7 @@ const ONE: usize = 1;
const TWO: usize = 2;
const LEN: usize = ONE - TWO;
//~^ ERROR E0080
//~| WARN attempt to subtract with overflow
//~| ERROR attempt to subtract with overflow
fn main() {
let a: [i8; LEN] = unimplemented!();

View File

@ -1,10 +1,10 @@
warning: attempt to subtract with overflow
error: attempt to subtract with overflow
--> $DIR/const-len-underflow-separate-spans.rs:17:20
|
LL | const LEN: usize = ONE - TWO;
| ^^^^^^^^^
|
= note: #[warn(const_err)] on by default
= note: #[deny(const_err)] on by default
error[E0080]: constant evaluation error
--> $DIR/const-len-underflow-separate-spans.rs:17:20
@ -18,6 +18,6 @@ error[E0080]: constant evaluation error
LL | let a: [i8; LEN] = unimplemented!();
| ^^^ referenced constant has errors
error: aborting due to 2 previous errors
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0080`.

View File

@ -12,15 +12,15 @@ error[E0080]: constant evaluation error
LL | X = (1 << 500), //~ ERROR E0080
| ^^^^^^^^^^ attempt to shift left with overflow
warning: attempt to divide by zero
error: attempt to divide by zero
--> $DIR/E0080.rs:14:9
|
LL | Y = (1 / 0) //~ ERROR E0080
| ^^^^^^^
|
= note: #[warn(const_err)] on by default
= note: #[deny(const_err)] on by default
warning: constant evaluation error
error: constant evaluation error
--> $DIR/E0080.rs:14:9
|
LL | Y = (1 / 0) //~ ERROR E0080
@ -32,6 +32,6 @@ error[E0080]: constant evaluation error
LL | Y = (1 / 0) //~ ERROR E0080
| ^^^^^^^ attempt to divide by zero
error: aborting due to 3 previous errors
error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0080`.