raw pointers are not references
This commit is contained in:
parent
2f1a8e2d7a
commit
0288a0bfa0
@ -337,7 +337,7 @@ const_eval_too_many_caller_args =
|
||||
|
||||
const_eval_transient_mut_borrow = mutable references are not allowed in {const_eval_const_context}s
|
||||
|
||||
const_eval_transient_mut_borrow_raw = raw mutable references are not allowed in {const_eval_const_context}s
|
||||
const_eval_transient_mut_raw = raw mutable pointers are not allowed in {const_eval_const_context}s
|
||||
|
||||
const_eval_try_block_from_output_non_const =
|
||||
`try` block cannot convert `{$ty}` to the result in {const_eval_const_context}s
|
||||
@ -351,21 +351,21 @@ const_eval_unallowed_heap_allocations =
|
||||
|
||||
const_eval_unallowed_inline_asm =
|
||||
inline assembly is not allowed in {const_eval_const_context}s
|
||||
const_eval_unallowed_mutable_refs =
|
||||
mutable references are not allowed in the final value of {const_eval_const_context}s
|
||||
const_eval_unallowed_mutable_raw =
|
||||
raw mutable pointers are not allowed in the final value of {const_eval_const_context}s
|
||||
.teach_note =
|
||||
References in statics and constants may only refer to immutable values.
|
||||
|
||||
|
||||
Statics are shared everywhere, and if they refer to mutable data one might violate memory
|
||||
safety since holding multiple mutable references to shared data is not allowed.
|
||||
|
||||
|
||||
If you really want global mutable state, try using static mut or a global UnsafeCell.
|
||||
|
||||
const_eval_unallowed_mutable_refs_raw =
|
||||
raw mutable references are not allowed in the final value of {const_eval_const_context}s
|
||||
const_eval_unallowed_mutable_refs =
|
||||
mutable references are not allowed in the final value of {const_eval_const_context}s
|
||||
.teach_note =
|
||||
References in statics and constants may only refer to immutable values.
|
||||
|
||||
|
||||
Statics are shared everywhere, and if they refer to mutable data one might violate memory
|
||||
safety since holding multiple mutable references to shared data is not allowed.
|
||||
|
||||
|
@ -114,8 +114,8 @@ pub(crate) struct TransientMutBorrowErr {
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(const_eval_transient_mut_borrow_raw, code = "E0658")]
|
||||
pub(crate) struct TransientMutBorrowErrRaw {
|
||||
#[diag(const_eval_transient_mut_raw, code = "E0658")]
|
||||
pub(crate) struct TransientMutRawErr {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub kind: ConstContext,
|
||||
@ -156,8 +156,8 @@ pub(crate) struct UnallowedMutableRefs {
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(const_eval_unallowed_mutable_refs_raw, code = "E0764")]
|
||||
pub(crate) struct UnallowedMutableRefsRaw {
|
||||
#[diag(const_eval_unallowed_mutable_raw, code = "E0764")]
|
||||
pub(crate) struct UnallowedMutableRaw {
|
||||
#[primary_span]
|
||||
pub span: Span,
|
||||
pub kind: ConstContext,
|
||||
|
@ -466,7 +466,7 @@ fn importance(&self) -> DiagnosticImportance {
|
||||
|
||||
fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> {
|
||||
match self.0 {
|
||||
hir::BorrowKind::Raw => ccx.dcx().create_err(errors::UnallowedMutableRefsRaw {
|
||||
hir::BorrowKind::Raw => ccx.tcx.dcx().create_err(errors::UnallowedMutableRaw {
|
||||
span,
|
||||
kind: ccx.const_kind(),
|
||||
teach: ccx.tcx.sess.teach(&error_code!(E0764)).then_some(()),
|
||||
@ -491,10 +491,10 @@ fn status_in_item(&self, _: &ConstCx<'_, 'tcx>) -> Status {
|
||||
fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> {
|
||||
let kind = ccx.const_kind();
|
||||
match self.0 {
|
||||
hir::BorrowKind::Raw => ccx.tcx.sess.create_feature_err(
|
||||
errors::TransientMutBorrowErrRaw { span, kind },
|
||||
sym::const_mut_refs,
|
||||
),
|
||||
hir::BorrowKind::Raw => ccx
|
||||
.tcx
|
||||
.sess
|
||||
.create_feature_err(errors::TransientMutRawErr { span, kind }, sym::const_mut_refs),
|
||||
hir::BorrowKind::Ref => ccx.tcx.sess.create_feature_err(
|
||||
errors::TransientMutBorrowErr { span, kind },
|
||||
sym::const_mut_refs,
|
||||
|
@ -1,14 +1,14 @@
|
||||
#![feature(raw_ref_op)]
|
||||
|
||||
const A: () = { let mut x = 2; &raw mut x; }; //~ mutable reference
|
||||
const A: () = { let mut x = 2; &raw mut x; }; //~ mutable pointer
|
||||
|
||||
static B: () = { let mut x = 2; &raw mut x; }; //~ mutable reference
|
||||
static B: () = { let mut x = 2; &raw mut x; }; //~ mutable pointer
|
||||
|
||||
static mut C: () = { let mut x = 2; &raw mut x; }; //~ mutable reference
|
||||
static mut C: () = { let mut x = 2; &raw mut x; }; //~ mutable pointer
|
||||
|
||||
const fn foo() {
|
||||
let mut x = 0;
|
||||
let y = &raw mut x; //~ mutable reference
|
||||
let y = &raw mut x; //~ mutable pointer
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0658]: raw mutable references are not allowed in constants
|
||||
error[E0658]: raw mutable pointers are not allowed in constants
|
||||
--> $DIR/const-address-of-mut.rs:3:32
|
||||
|
|
||||
LL | const A: () = { let mut x = 2; &raw mut x; };
|
||||
@ -8,7 +8,7 @@ LL | const A: () = { let mut x = 2; &raw mut x; };
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: raw mutable references are not allowed in statics
|
||||
error[E0658]: raw mutable pointers are not allowed in statics
|
||||
--> $DIR/const-address-of-mut.rs:5:33
|
||||
|
|
||||
LL | static B: () = { let mut x = 2; &raw mut x; };
|
||||
@ -18,7 +18,7 @@ LL | static B: () = { let mut x = 2; &raw mut x; };
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: raw mutable references are not allowed in statics
|
||||
error[E0658]: raw mutable pointers are not allowed in statics
|
||||
--> $DIR/const-address-of-mut.rs:7:37
|
||||
|
|
||||
LL | static mut C: () = { let mut x = 2; &raw mut x; };
|
||||
@ -28,7 +28,7 @@ LL | static mut C: () = { let mut x = 2; &raw mut x; };
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: raw mutable references are not allowed in constant functions
|
||||
error[E0658]: raw mutable pointers are not allowed in constant functions
|
||||
--> $DIR/const-address-of-mut.rs:11:13
|
||||
|
|
||||
LL | let y = &raw mut x;
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
const fn mutable_address_of_in_const() {
|
||||
let mut a = 0;
|
||||
let b = &raw mut a; //~ ERROR mutable reference
|
||||
let b = &raw mut a; //~ ERROR mutable pointer
|
||||
}
|
||||
|
||||
struct X;
|
||||
@ -10,7 +10,7 @@ const fn mutable_address_of_in_const() {
|
||||
impl X {
|
||||
const fn inherent_mutable_address_of_in_const() {
|
||||
let mut a = 0;
|
||||
let b = &raw mut a; //~ ERROR mutable reference
|
||||
let b = &raw mut a; //~ ERROR mutable pointer
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
error[E0658]: raw mutable references are not allowed in constant functions
|
||||
error[E0658]: raw mutable pointers are not allowed in constant functions
|
||||
--> $DIR/address_of.rs:5:13
|
||||
|
|
||||
LL | let b = &raw mut a;
|
||||
@ -8,7 +8,7 @@ LL | let b = &raw mut a;
|
||||
= help: add `#![feature(const_mut_refs)]` to the crate attributes to enable
|
||||
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
|
||||
|
||||
error[E0658]: raw mutable references are not allowed in constant functions
|
||||
error[E0658]: raw mutable pointers are not allowed in constant functions
|
||||
--> $DIR/address_of.rs:13:17
|
||||
|
|
||||
LL | let b = &raw mut a;
|
||||
|
Loading…
Reference in New Issue
Block a user