about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-19 12:22:39 -0800
committerDylan MacKenzie <ecstaticmorse@gmail.com>2019-11-21 16:55:13 -0800
commitb09bb1569b23eaadcf22d7420f1ba9872c1088f7 (patch)
treea4e1aa529d6db918abee047be915c909ae95f77e
parent25122d09ebd27b39830e662a9e7ef3ccfd68dd95 (diff)
Allow `Downcast` projections in `qualify_min_const_fn`
-rw-r--r--src/librustc_mir/transform/qualify_min_const_fn.rs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/librustc_mir/transform/qualify_min_const_fn.rs b/src/librustc_mir/transform/qualify_min_const_fn.rs
index c5fa9df528c..2bc44d2e5c1 100644
--- a/src/librustc_mir/transform/qualify_min_const_fn.rs
+++ b/src/librustc_mir/transform/qualify_min_const_fn.rs
@@ -266,9 +266,10 @@ fn check_place(
     while let &[ref proj_base @ .., elem] = cursor {
         cursor = proj_base;
         match elem {
-            ProjectionElem::Downcast(..) => {
-                return Err((span, "`match` or `if let` in `const fn` is unstable".into()));
-            }
+            ProjectionElem::Downcast(..) if !tcx.features().const_if_match
+                => return Err((span, "`match` or `if let` in `const fn` is unstable".into())),
+            ProjectionElem::Downcast(_symbol, _variant_index) => {}
+
             ProjectionElem::Field(..) => {
                 let base_ty = Place::ty_from(&place.base, &proj_base, body, tcx).ty;
                 if let Some(def) = base_ty.ty_adt_def() {