Check for use of mutable/extern statics in THIR unsafeck
This commit is contained in:
parent
6b327aaa08
commit
0e1afc4501
26 changed files with 238 additions and 28 deletions
|
@ -169,14 +169,20 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ExprKind::InlineAsm { .. } | ExprKind::LlvmInlineAsm { .. } => {
|
|
||||||
self.requires_unsafe(expr.span, UseOfInlineAssembly);
|
|
||||||
}
|
|
||||||
ExprKind::Deref { arg } => {
|
ExprKind::Deref { arg } => {
|
||||||
if self.thir[arg].ty.is_unsafe_ptr() {
|
if let ExprKind::StaticRef { def_id, .. } = self.thir[arg].kind {
|
||||||
|
if self.tcx.is_mutable_static(def_id) {
|
||||||
|
self.requires_unsafe(expr.span, UseOfMutableStatic);
|
||||||
|
} else if self.tcx.is_foreign_item(def_id) {
|
||||||
|
self.requires_unsafe(expr.span, UseOfExternStatic);
|
||||||
|
}
|
||||||
|
} else if self.thir[arg].ty.is_unsafe_ptr() {
|
||||||
self.requires_unsafe(expr.span, DerefOfRawPointer);
|
self.requires_unsafe(expr.span, DerefOfRawPointer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ExprKind::InlineAsm { .. } | ExprKind::LlvmInlineAsm { .. } => {
|
||||||
|
self.requires_unsafe(expr.span, UseOfInlineAssembly);
|
||||||
|
}
|
||||||
ExprKind::Adt {
|
ExprKind::Adt {
|
||||||
adt_def,
|
adt_def,
|
||||||
variant_index: _,
|
variant_index: _,
|
||||||
|
@ -242,9 +248,7 @@ enum UnsafeOpKind {
|
||||||
UseOfInlineAssembly,
|
UseOfInlineAssembly,
|
||||||
InitializingTypeWith,
|
InitializingTypeWith,
|
||||||
CastOfPointerToInt,
|
CastOfPointerToInt,
|
||||||
#[allow(dead_code)] // FIXME
|
|
||||||
UseOfMutableStatic,
|
UseOfMutableStatic,
|
||||||
#[allow(dead_code)] // FIXME
|
|
||||||
UseOfExternStatic,
|
UseOfExternStatic,
|
||||||
DerefOfRawPointer,
|
DerefOfRawPointer,
|
||||||
#[allow(dead_code)] // FIXME
|
#[allow(dead_code)] // FIXME
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/issue-28575.rs:8:5
|
--> $DIR/issue-28575.rs:11:5
|
||||||
|
|
|
|
||||||
LL | FOO()
|
LL | FOO()
|
||||||
| ^^^ use of extern static
|
| ^^^ use of extern static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
#![feature(intrinsics)]
|
#![feature(intrinsics)]
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
11
src/test/ui/intrinsics/issue-28575.thir.stderr
Normal file
11
src/test/ui/intrinsics/issue-28575.thir.stderr
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/issue-28575.rs:11:5
|
||||||
|
|
|
||||||
|
LL | FOO()
|
||||||
|
| ^^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/issue-14227.rs:4:21
|
--> $DIR/issue-14227.rs:7:21
|
||||||
|
|
|
|
||||||
LL | static CRASH: u32 = symbol;
|
LL | static CRASH: u32 = symbol;
|
||||||
| ^^^^^^ use of extern static
|
| ^^^^^^ use of extern static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
pub static symbol: u32;
|
pub static symbol: u32;
|
||||||
}
|
}
|
||||||
|
|
11
src/test/ui/issues/issue-14227.thir.stderr
Normal file
11
src/test/ui/issues/issue-14227.thir.stderr
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/issue-14227.rs:7:21
|
||||||
|
|
|
||||||
|
LL | static CRASH: u32 = symbol;
|
||||||
|
| ^^^^^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,11 +1,11 @@
|
||||||
error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
|
error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
|
||||||
--> $DIR/issue-16538.rs:11:27
|
--> $DIR/issue-16538.rs:14:27
|
||||||
|
|
|
|
||||||
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
error[E0277]: `*const usize` cannot be shared between threads safely
|
error[E0277]: `*const usize` cannot be shared between threads safely
|
||||||
--> $DIR/issue-16538.rs:11:1
|
--> $DIR/issue-16538.rs:14:1
|
||||||
|
|
|
|
||||||
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const usize` cannot be shared between threads safely
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const usize` cannot be shared between threads safely
|
||||||
|
@ -14,7 +14,7 @@ LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
= note: shared static variables must have a type that implements `Sync`
|
= note: shared static variables must have a type that implements `Sync`
|
||||||
|
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/issue-16538.rs:11:34
|
--> $DIR/issue-16538.rs:14:34
|
||||||
|
|
|
|
||||||
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
| ^^^^ use of extern static
|
| ^^^^ use of extern static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
mod Y {
|
mod Y {
|
||||||
pub type X = usize;
|
pub type X = usize;
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
27
src/test/ui/issues/issue-16538.thir.stderr
Normal file
27
src/test/ui/issues/issue-16538.thir.stderr
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple variants
|
||||||
|
--> $DIR/issue-16538.rs:14:27
|
||||||
|
|
|
||||||
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error[E0277]: `*const usize` cannot be shared between threads safely
|
||||||
|
--> $DIR/issue-16538.rs:14:1
|
||||||
|
|
|
||||||
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const usize` cannot be shared between threads safely
|
||||||
|
|
|
||||||
|
= help: the trait `Sync` is not implemented for `*const usize`
|
||||||
|
= note: shared static variables must have a type that implements `Sync`
|
||||||
|
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/issue-16538.rs:14:34
|
||||||
|
|
|
||||||
|
LL | static foo: *const Y::X = Y::foo(Y::x as *const Y::X);
|
||||||
|
| ^^^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0015, E0133, E0277.
|
||||||
|
For more information about an error, try `rustc --explain E0015`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/issue-28324.rs:5:24
|
--> $DIR/issue-28324.rs:8:24
|
||||||
|
|
|
|
||||||
LL | pub static BAZ: u32 = *&error_message_count;
|
LL | pub static BAZ: u32 = *&error_message_count;
|
||||||
| ^^^^^^^^^^^^^^^^^^^^ use of extern static
|
| ^^^^^^^^^^^^^^^^^^^^ use of extern static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
static error_message_count: u32;
|
static error_message_count: u32;
|
||||||
}
|
}
|
||||||
|
|
11
src/test/ui/issues/issue-28324.thir.stderr
Normal file
11
src/test/ui/issues/issue-28324.thir.stderr
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/issue-28324.rs:8:25
|
||||||
|
|
|
||||||
|
LL | pub static BAZ: u32 = *&error_message_count;
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics-mut.rs:11:13
|
--> $DIR/safe-extern-statics-mut.rs:13:13
|
||||||
|
|
|
|
||||||
LL | let b = B;
|
LL | let b = B;
|
||||||
| ^ use of mutable static
|
| ^ use of mutable static
|
||||||
|
@ -7,7 +7,7 @@ LL | let b = B;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics-mut.rs:12:14
|
--> $DIR/safe-extern-statics-mut.rs:14:14
|
||||||
|
|
|
|
||||||
LL | let rb = &B;
|
LL | let rb = &B;
|
||||||
| ^^ use of mutable static
|
| ^^ use of mutable static
|
||||||
|
@ -15,7 +15,7 @@ LL | let rb = &B;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics-mut.rs:13:14
|
--> $DIR/safe-extern-statics-mut.rs:15:14
|
||||||
|
|
|
|
||||||
LL | let xb = XB;
|
LL | let xb = XB;
|
||||||
| ^^ use of mutable static
|
| ^^ use of mutable static
|
||||||
|
@ -23,7 +23,7 @@ LL | let xb = XB;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics-mut.rs:14:15
|
--> $DIR/safe-extern-statics-mut.rs:16:15
|
||||||
|
|
|
|
||||||
LL | let xrb = &XB;
|
LL | let xrb = &XB;
|
||||||
| ^^^ use of mutable static
|
| ^^^ use of mutable static
|
|
@ -1,4 +1,6 @@
|
||||||
// aux-build:extern-statics.rs
|
// aux-build:extern-statics.rs
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
extern crate extern_statics;
|
extern crate extern_statics;
|
||||||
use extern_statics::*;
|
use extern_statics::*;
|
||||||
|
|
35
src/test/ui/safe-extern-statics-mut.thir.stderr
Normal file
35
src/test/ui/safe-extern-statics-mut.thir.stderr
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics-mut.rs:13:13
|
||||||
|
|
|
||||||
|
LL | let b = B;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics-mut.rs:14:15
|
||||||
|
|
|
||||||
|
LL | let rb = &B;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics-mut.rs:15:14
|
||||||
|
|
|
||||||
|
LL | let xb = XB;
|
||||||
|
| ^^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics-mut.rs:16:16
|
||||||
|
|
|
||||||
|
LL | let xrb = &XB;
|
||||||
|
| ^^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics.rs:11:13
|
--> $DIR/safe-extern-statics.rs:13:13
|
||||||
|
|
|
|
||||||
LL | let a = A;
|
LL | let a = A;
|
||||||
| ^ use of extern static
|
| ^ use of extern static
|
||||||
|
@ -7,7 +7,7 @@ LL | let a = A;
|
||||||
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics.rs:12:14
|
--> $DIR/safe-extern-statics.rs:14:14
|
||||||
|
|
|
|
||||||
LL | let ra = &A;
|
LL | let ra = &A;
|
||||||
| ^^ use of extern static
|
| ^^ use of extern static
|
||||||
|
@ -15,7 +15,7 @@ LL | let ra = &A;
|
||||||
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics.rs:13:14
|
--> $DIR/safe-extern-statics.rs:15:14
|
||||||
|
|
|
|
||||||
LL | let xa = XA;
|
LL | let xa = XA;
|
||||||
| ^^ use of extern static
|
| ^^ use of extern static
|
||||||
|
@ -23,7 +23,7 @@ LL | let xa = XA;
|
||||||
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/safe-extern-statics.rs:14:15
|
--> $DIR/safe-extern-statics.rs:16:15
|
||||||
|
|
|
|
||||||
LL | let xra = &XA;
|
LL | let xra = &XA;
|
||||||
| ^^^ use of extern static
|
| ^^^ use of extern static
|
|
@ -1,4 +1,6 @@
|
||||||
// aux-build:extern-statics.rs
|
// aux-build:extern-statics.rs
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
extern crate extern_statics;
|
extern crate extern_statics;
|
||||||
use extern_statics::*;
|
use extern_statics::*;
|
||||||
|
|
35
src/test/ui/safe-extern-statics.thir.stderr
Normal file
35
src/test/ui/safe-extern-statics.thir.stderr
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics.rs:13:13
|
||||||
|
|
|
||||||
|
LL | let a = A;
|
||||||
|
| ^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics.rs:14:15
|
||||||
|
|
|
||||||
|
LL | let ra = &A;
|
||||||
|
| ^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics.rs:15:14
|
||||||
|
|
|
||||||
|
LL | let xa = XA;
|
||||||
|
| ^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of extern static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/safe-extern-statics.rs:16:16
|
||||||
|
|
|
||||||
|
LL | let xra = &XA;
|
||||||
|
| ^^ use of extern static
|
||||||
|
|
|
||||||
|
= note: extern statics are not controlled by the Rust type system: invalid data, aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-foreign-requires-unsafe.rs:6:5
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:9:5
|
||||||
|
|
|
|
||||||
LL | a += 3;
|
LL | a += 3;
|
||||||
| ^^^^^^ use of mutable static
|
| ^^^^^^ use of mutable static
|
||||||
|
@ -7,7 +7,7 @@ LL | a += 3;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-foreign-requires-unsafe.rs:7:5
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:10:5
|
||||||
|
|
|
|
||||||
LL | a = 4;
|
LL | a = 4;
|
||||||
| ^^^^^ use of mutable static
|
| ^^^^^ use of mutable static
|
||||||
|
@ -15,7 +15,7 @@ LL | a = 4;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-foreign-requires-unsafe.rs:8:14
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:11:14
|
||||||
|
|
|
|
||||||
LL | let _b = a;
|
LL | let _b = a;
|
||||||
| ^ use of mutable static
|
| ^ use of mutable static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
static mut a: i32;
|
static mut a: i32;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:9:5
|
||||||
|
|
|
||||||
|
LL | a += 3;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:10:5
|
||||||
|
|
|
||||||
|
LL | a = 4;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-foreign-requires-unsafe.rs:11:14
|
||||||
|
|
|
||||||
|
LL | let _b = a;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -1,5 +1,5 @@
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-requires-unsafe.rs:4:5
|
--> $DIR/static-mut-requires-unsafe.rs:7:5
|
||||||
|
|
|
|
||||||
LL | a += 3;
|
LL | a += 3;
|
||||||
| ^^^^^^ use of mutable static
|
| ^^^^^^ use of mutable static
|
||||||
|
@ -7,7 +7,7 @@ LL | a += 3;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-requires-unsafe.rs:5:5
|
--> $DIR/static-mut-requires-unsafe.rs:8:5
|
||||||
|
|
|
|
||||||
LL | a = 4;
|
LL | a = 4;
|
||||||
| ^^^^^ use of mutable static
|
| ^^^^^ use of mutable static
|
||||||
|
@ -15,7 +15,7 @@ LL | a = 4;
|
||||||
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
--> $DIR/static-mut-requires-unsafe.rs:6:14
|
--> $DIR/static-mut-requires-unsafe.rs:9:14
|
||||||
|
|
|
|
||||||
LL | let _b = a;
|
LL | let _b = a;
|
||||||
| ^ use of mutable static
|
| ^ use of mutable static
|
|
@ -1,3 +1,6 @@
|
||||||
|
// revisions: mir thir
|
||||||
|
// [thir]compile-flags: -Z thir-unsafeck
|
||||||
|
|
||||||
static mut a: isize = 3;
|
static mut a: isize = 3;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
|
27
src/test/ui/static/static-mut-requires-unsafe.thir.stderr
Normal file
27
src/test/ui/static/static-mut-requires-unsafe.thir.stderr
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-requires-unsafe.rs:7:5
|
||||||
|
|
|
||||||
|
LL | a += 3;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-requires-unsafe.rs:8:5
|
||||||
|
|
|
||||||
|
LL | a = 4;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error[E0133]: use of mutable static is unsafe and requires unsafe function or block
|
||||||
|
--> $DIR/static-mut-requires-unsafe.rs:9:14
|
||||||
|
|
|
||||||
|
LL | let _b = a;
|
||||||
|
| ^ use of mutable static
|
||||||
|
|
|
||||||
|
= note: mutable statics can be mutated by multiple threads: aliasing violations or data races will cause undefined behavior
|
||||||
|
|
||||||
|
error: aborting due to 3 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0133`.
|
|
@ -7,8 +7,8 @@ use std::path::Path;
|
||||||
|
|
||||||
const ENTRY_LIMIT: usize = 1000;
|
const ENTRY_LIMIT: usize = 1000;
|
||||||
// FIXME: The following limits should be reduced eventually.
|
// FIXME: The following limits should be reduced eventually.
|
||||||
const ROOT_ENTRY_LIMIT: usize = 1370;
|
const ROOT_ENTRY_LIMIT: usize = 1371;
|
||||||
const ISSUES_ENTRY_LIMIT: usize = 2555;
|
const ISSUES_ENTRY_LIMIT: usize = 2558;
|
||||||
|
|
||||||
fn check_entries(path: &Path, bad: &mut bool) {
|
fn check_entries(path: &Path, bad: &mut bool) {
|
||||||
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
let dirs = walkdir::WalkDir::new(&path.join("test/ui"))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue