Skip to content

Commit

Permalink
Auto merge of #75136 - JohnTitor:unsizing-casts-non-null, r=oli-obk
Browse files Browse the repository at this point in the history
Forbid non-derefable types explicitly in unsizing casts

Fixes #75118
r? @oli-obk
  • Loading branch information
bors committed Aug 4, 2020
2 parents d08eb98 + cd7204e commit f9d422e
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
10 changes: 9 additions & 1 deletion src/librustc_mir/transform/qualify_min_const_fn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,15 @@ fn check_rvalue(
_,
) => Err((span, "function pointer casts are not allowed in const fn".into())),
Rvalue::Cast(CastKind::Pointer(PointerCast::Unsize), op, cast_ty) => {
let pointee_ty = cast_ty.builtin_deref(true).unwrap().ty;
let pointee_ty = if let Some(deref_ty) = cast_ty.builtin_deref(true) {
deref_ty.ty
} else {
// We cannot allow this for now.
return Err((
span,
"unsizing casts are only allowed for references right now".into(),
));
};
let unsized_ty = tcx.struct_tail_erasing_lifetimes(pointee_ty, tcx.param_env(def_id));
if let ty::Slice(_) | ty::Str = unsized_ty.kind {
check_operand(tcx, op, span, def_id, body)?;
Expand Down
10 changes: 10 additions & 0 deletions src/test/ui/consts/unsizing-cast-non-null.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// Regression test for #75118.

use std::ptr::NonNull;

pub const fn dangling_slice<T>() -> NonNull<[T]> {
NonNull::<[T; 0]>::dangling()
//~^ ERROR: unsizing casts are only allowed for references right now
}

fn main() {}
12 changes: 12 additions & 0 deletions src/test/ui/consts/unsizing-cast-non-null.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
error[E0723]: unsizing casts are only allowed for references right now
--> $DIR/unsizing-cast-non-null.rs:6:5
|
LL | NonNull::<[T; 0]>::dangling()
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable

error: aborting due to previous error

For more information about this error, try `rustc --explain E0723`.

0 comments on commit f9d422e

Please sign in to comment.