Skip to content

Commit

Permalink
more erroneous-const tests
Browse files Browse the repository at this point in the history
  • Loading branch information
RalfJung committed May 9, 2021
1 parent 8a878f0 commit 7a01160
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/test/ui/consts/const-eval/erroneous-const.rs
Expand Up @@ -10,6 +10,8 @@ impl<T> PrintName<T> {

const fn no_codegen<T>() {
if false {
// This bad constant is only used in dead code in a no-codegen function... and yet we still
// must make sure that the build fails.
let _ = PrintName::<T>::VOID; //~ERROR could not evaluate static initializer
}
}
Expand Down
6 changes: 3 additions & 3 deletions src/test/ui/consts/const-eval/erroneous-const.stderr
Expand Up @@ -27,16 +27,16 @@ LL | #![warn(const_err, unconditional_panic)]
= note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>

error[E0080]: could not evaluate static initializer
--> $DIR/erroneous-const.rs:13:17
--> $DIR/erroneous-const.rs:15:17
|
LL | let _ = PrintName::<T>::VOID;
| ^^^^^^^^^^^^^^^^^^^^
| |
| referenced constant has errors
| inside `no_codegen::<i32>` at $DIR/erroneous-const.rs:13:17
| inside `no_codegen::<i32>` at $DIR/erroneous-const.rs:15:17
...
LL | pub static FOO: () = no_codegen::<i32>();
| ------------------- inside `FOO` at $DIR/erroneous-const.rs:17:22
| ------------------- inside `FOO` at $DIR/erroneous-const.rs:19:22

error: aborting due to previous error; 2 warnings emitted

Expand Down
21 changes: 21 additions & 0 deletions src/test/ui/consts/const-eval/erroneous-const2.rs
@@ -0,0 +1,21 @@
//! Make sure we error on erroneous consts even if they are unused.
#![warn(const_err, unconditional_panic)]

struct PrintName<T>(T);
impl<T> PrintName<T> {
const VOID: () = [()][2]; //~WARN any use of this value will cause an error
//~^ WARN this operation will panic at runtime
//~| WARN this was previously accepted by the compiler but is being phased out
}

pub static FOO: () = {
if false {
// This bad constant is only used in dead code in a static initializer... and yet we still
// must make sure that the build fails.
let _ = PrintName::<i32>::VOID; //~ERROR could not evaluate static initializer
}
};

fn main() {
FOO
}
37 changes: 37 additions & 0 deletions src/test/ui/consts/const-eval/erroneous-const2.stderr
@@ -0,0 +1,37 @@
warning: this operation will panic at runtime
--> $DIR/erroneous-const2.rs:6:22
|
LL | const VOID: () = [()][2];
| ^^^^^^^ index out of bounds: the length is 1 but the index is 2
|
note: the lint level is defined here
--> $DIR/erroneous-const2.rs:2:20
|
LL | #![warn(const_err, unconditional_panic)]
| ^^^^^^^^^^^^^^^^^^^

warning: any use of this value will cause an error
--> $DIR/erroneous-const2.rs:6:22
|
LL | const VOID: () = [()][2];
| -----------------^^^^^^^-
| |
| index out of bounds: the length is 1 but the index is 2
|
note: the lint level is defined here
--> $DIR/erroneous-const2.rs:2:9
|
LL | #![warn(const_err, unconditional_panic)]
| ^^^^^^^^^
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>

error[E0080]: could not evaluate static initializer
--> $DIR/erroneous-const2.rs:15:17
|
LL | let _ = PrintName::<i32>::VOID;
| ^^^^^^^^^^^^^^^^^^^^^^ referenced constant has errors

error: aborting due to previous error; 2 warnings emitted

For more information about this error, try `rustc --explain E0080`.

0 comments on commit 7a01160

Please sign in to comment.