Update test for mutably borrowed statics in a const

This checks `static mut` as well for E0017, and blesses tests now that
we emit an error for a mut deref.
This commit is contained in:
Dylan MacKenzie 2019-11-26 17:08:46 -08:00
parent a70ac50ec4
commit 846be82277
2 changed files with 21 additions and 6 deletions

View File

@ -1,8 +1,11 @@
static X: i32 = 1;
const C: i32 = 2;
static mut M: i32 = 3;
const CR: &'static mut i32 = &mut C; //~ ERROR E0017
static STATIC_REF: &'static mut i32 = &mut X; //~ ERROR E0017
//~| ERROR E0019
//~| ERROR cannot borrow
static CONST_REF: &'static mut i32 = &mut C; //~ ERROR E0017
static STATIC_MUT_REF: &'static mut i32 = unsafe { &mut M }; //~ ERROR E0017
fn main() {}

View File

@ -1,28 +1,40 @@
error[E0017]: references in constants may only refer to immutable values
--> $DIR/E0017.rs:4:30
--> $DIR/E0017.rs:5:30
|
LL | const CR: &'static mut i32 = &mut C;
| ^^^^^^ constants require immutable values
error[E0019]: static contains unimplemented expression type
--> $DIR/E0017.rs:6:39
|
LL | static STATIC_REF: &'static mut i32 = &mut X;
| ^^^^^^
error[E0017]: references in statics may only refer to immutable values
--> $DIR/E0017.rs:5:39
--> $DIR/E0017.rs:6:39
|
LL | static STATIC_REF: &'static mut i32 = &mut X;
| ^^^^^^ statics require immutable values
error[E0596]: cannot borrow immutable static item `X` as mutable
--> $DIR/E0017.rs:5:39
--> $DIR/E0017.rs:6:39
|
LL | static STATIC_REF: &'static mut i32 = &mut X;
| ^^^^^^ cannot borrow as mutable
error[E0017]: references in statics may only refer to immutable values
--> $DIR/E0017.rs:7:38
--> $DIR/E0017.rs:9:38
|
LL | static CONST_REF: &'static mut i32 = &mut C;
| ^^^^^^ statics require immutable values
error: aborting due to 4 previous errors
error[E0017]: references in statics may only refer to immutable values
--> $DIR/E0017.rs:10:52
|
LL | static STATIC_MUT_REF: &'static mut i32 = unsafe { &mut M };
| ^^^^^^ statics require immutable values
Some errors have detailed explanations: E0017, E0596.
error: aborting due to 6 previous errors
Some errors have detailed explanations: E0017, E0019, E0596.
For more information about an error, try `rustc --explain E0017`.