diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-05-26 22:11:31 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-26 22:11:31 +0200 |
| commit | 401b3aefe94723df7c55965f128f83a9f7b233ab (patch) | |
| tree | e2a37740b7490822a955b61be1feebe9124030d7 | |
| parent | e38fdda243c890bc8f4ce93eb82fd1bf750ebbe7 (diff) | |
| parent | 09619bc4592418aa66a77bf90c6c2efbd648d103 (diff) | |
| download | rust-401b3aefe94723df7c55965f128f83a9f7b233ab.tar.gz rust-401b3aefe94723df7c55965f128f83a9f7b233ab.zip | |
Rollup merge of #72401 - ecstatic-morse:issue-72394, r=eddyb
Use correct function for detecting `const fn` in unsafety checking Resolves #72394.
| -rw-r--r-- | src/librustc_mir/transform/check_unsafety.rs | 4 | ||||
| -rw-r--r-- | src/test/ui/unsafe/unsafe-unstable-const-fn.rs | 13 | ||||
| -rw-r--r-- | src/test/ui/unsafe/unsafe-unstable-const-fn.stderr | 11 |
3 files changed, 26 insertions, 2 deletions
diff --git a/src/librustc_mir/transform/check_unsafety.rs b/src/librustc_mir/transform/check_unsafety.rs index 9bcb45f6493..a335fa2de41 100644 --- a/src/librustc_mir/transform/check_unsafety.rs +++ b/src/librustc_mir/transform/check_unsafety.rs @@ -14,7 +14,7 @@ use rustc_span::symbol::{sym, Symbol}; use std::ops::Bound; -use crate::const_eval::{is_const_fn, is_min_const_fn}; +use crate::const_eval::is_min_const_fn; use crate::util; pub struct UnsafetyChecker<'a, 'tcx> { @@ -527,7 +527,7 @@ fn unsafety_check_result(tcx: TyCtxt<'_>, def_id: LocalDefId) -> UnsafetyCheckRe let (const_context, min_const_fn) = match tcx.hir().body_owner_kind(id) { hir::BodyOwnerKind::Closure => (false, false), hir::BodyOwnerKind::Fn => { - (is_const_fn(tcx, def_id.to_def_id()), is_min_const_fn(tcx, def_id.to_def_id())) + (tcx.is_const_fn_raw(def_id.to_def_id()), is_min_const_fn(tcx, def_id.to_def_id())) } hir::BodyOwnerKind::Const | hir::BodyOwnerKind::Static(_) => (true, false), }; diff --git a/src/test/ui/unsafe/unsafe-unstable-const-fn.rs b/src/test/ui/unsafe/unsafe-unstable-const-fn.rs new file mode 100644 index 00000000000..d9d85ee9132 --- /dev/null +++ b/src/test/ui/unsafe/unsafe-unstable-const-fn.rs @@ -0,0 +1,13 @@ +#![stable(feature = "foo", since = "1.33.0")] +#![feature(staged_api)] +#![feature(const_compare_raw_pointers)] +#![feature(const_fn)] + +#[stable(feature = "foo", since = "1.33.0")] +#[rustc_const_unstable(feature = "const_foo", issue = "none")] +const fn unstable(a: *const i32, b: *const i32) -> bool { + a == b + //~^ pointer operation is unsafe +} + +fn main() {} diff --git a/src/test/ui/unsafe/unsafe-unstable-const-fn.stderr b/src/test/ui/unsafe/unsafe-unstable-const-fn.stderr new file mode 100644 index 00000000000..d8f3737c8f5 --- /dev/null +++ b/src/test/ui/unsafe/unsafe-unstable-const-fn.stderr @@ -0,0 +1,11 @@ +error[E0133]: pointer operation is unsafe and requires unsafe function or block + --> $DIR/unsafe-unstable-const-fn.rs:9:5 + | +LL | a == b + | ^^^^^^ pointer operation + | + = note: operations on pointers in constants + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0133`. |
