Stabilize const_raw_ptr_deref
for *const T
This stabilizes dereferencing immutable raw pointers in const contexts. It does not stabilize `*mut T` dereferencing. This is placed behind the `const_raw_mut_ptr_deref` feature gate.
This commit is contained in:
parent
5ec7d1dad6
commit
0cdbeaa2a3
62 changed files with 114 additions and 193 deletions
|
@ -725,7 +725,7 @@ impl Visitor<'tcx> for Checker<'mir, 'tcx> {
|
|||
match elem {
|
||||
ProjectionElem::Deref => {
|
||||
let base_ty = Place::ty_from(place_local, proj_base, self.body, self.tcx).ty;
|
||||
if let ty::RawPtr(_) = base_ty.kind() {
|
||||
if base_ty.is_unsafe_ptr() {
|
||||
if proj_base.is_empty() {
|
||||
let decl = &self.body.local_decls[place_local];
|
||||
if let Some(box LocalInfo::StaticRef { def_id, .. }) = decl.local_info {
|
||||
|
@ -734,7 +734,13 @@ impl Visitor<'tcx> for Checker<'mir, 'tcx> {
|
|||
return;
|
||||
}
|
||||
}
|
||||
self.check_op(ops::RawPtrDeref);
|
||||
|
||||
// `*const T` is stable, `*mut T` is not
|
||||
if !base_ty.is_mutable_ptr() {
|
||||
return;
|
||||
}
|
||||
|
||||
self.check_op(ops::RawMutPtrDeref);
|
||||
}
|
||||
|
||||
if context.is_mutating_use() {
|
||||
|
|
|
@ -400,18 +400,18 @@ impl NonConstOp for RawPtrComparison {
|
|||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct RawPtrDeref;
|
||||
impl NonConstOp for RawPtrDeref {
|
||||
pub struct RawMutPtrDeref;
|
||||
impl NonConstOp for RawMutPtrDeref {
|
||||
fn status_in_item(&self, _: &ConstCx<'_, '_>) -> Status {
|
||||
Status::Unstable(sym::const_raw_ptr_deref)
|
||||
Status::Unstable(sym::const_mut_refs)
|
||||
}
|
||||
|
||||
fn build_error(&self, ccx: &ConstCx<'_, 'tcx>, span: Span) -> DiagnosticBuilder<'tcx> {
|
||||
feature_err(
|
||||
&ccx.tcx.sess.parse_sess,
|
||||
sym::const_raw_ptr_deref,
|
||||
sym::const_mut_refs,
|
||||
span,
|
||||
&format!("dereferencing raw pointers in {}s is unstable", ccx.const_kind(),),
|
||||
&format!("dereferencing raw mutable pointers in {}s is unstable", ccx.const_kind(),),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue