this.super_place(place, context, location);
match proj.elem {
ProjectionElem::Deref => {
- if let Mode::Fn = this.mode {
- this.add(Qualif::NOT_CONST);
- } else {
- let base_ty = proj.base.ty(this.mir, this.tcx).to_ty(this.tcx);
- if let ty::RawPtr(_) = base_ty.sty {
- if !this.tcx.sess.features_untracked().const_raw_ptr_deref {
- emit_feature_err(
- &this.tcx.sess.parse_sess, "const_raw_ptr_deref",
- this.span, GateIssue::Language,
- &format!(
- "dereferencing raw pointers in {}s is unstable",
- this.mode,
- ),
- );
+ this.add(Qualif::NOT_CONST);
+ let base_ty = proj.base.ty(this.mir, this.tcx).to_ty(this.tcx);
+ match this.mode {
+ Mode::Fn => {},
+ _ => {
+ if let ty::RawPtr(_) = base_ty.sty {
+ if !this.tcx.sess.features_untracked().const_raw_ptr_deref {
+ emit_feature_err(
+ &this.tcx.sess.parse_sess, "const_raw_ptr_deref",
+ this.span, GateIssue::Language,
+ &format!(
+ "dereferencing raw pointers in {}s is unstable",
+ this.mode,
+ ),
+ );
+ }
}
}
}
--- /dev/null
+#![feature(nll)]
+
+const FOO: Option<&[[u8; 3]]> = Some(&[*b"foo"]); //~ ERROR temporary value dropped while borrowed
+
+use std::borrow::Cow;
+
+pub const X: [u8; 3] = *b"ABC";
+pub const Y: Cow<'static, [ [u8; 3] ]> = Cow::Borrowed(&[X]);
+
+
+pub const Z: Cow<'static, [ [u8; 3] ]> = Cow::Borrowed(&[*b"ABC"]);
+//~^ ERROR temporary value dropped while borrowed
+
+fn main() {}
--- /dev/null
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-54224.rs:3:39
+ |
+LL | const FOO: Option<&[[u8; 3]]> = Some(&[*b"foo"]); //~ ERROR temporary value dropped while borrowed
+ | ^^^^^^^^^- temporary value is freed at the end of this statement
+ | |
+ | creates a temporary which is freed while still in use
+ |
+ = note: borrowed value must be valid for the static lifetime...
+
+error[E0716]: temporary value dropped while borrowed
+ --> $DIR/issue-54224.rs:11:57
+ |
+LL | pub const Z: Cow<'static, [ [u8; 3] ]> = Cow::Borrowed(&[*b"ABC"]);
+ | ^^^^^^^^^- temporary value is freed at the end of this statement
+ | |
+ | creates a temporary which is freed while still in use
+ |
+ = note: borrowed value must be valid for the static lifetime...
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0716`.