about summary refs log tree commit diff
path: root/src/librustc_mir
diff options
context:
space:
mode:
authorTyler Mandry <tmandry@gmail.com>2019-10-11 15:09:42 -0700
committerGitHub <noreply@github.com>2019-10-11 15:09:42 -0700
commitea0d155f2d0fa8328c93ee7ca52f96ccd764ccf0 (patch)
tree69408fb9053a57ce42a8e5babf752d448ed05143 /src/librustc_mir
parent215b09194f2ca1c19b1b5b4f5de4044671d6ad9a (diff)
parent8569dd1db985509cd235fafdd962aa52ced68e35 (diff)
downloadrust-ea0d155f2d0fa8328c93ee7ca52f96ccd764ccf0.tar.gz
rust-ea0d155f2d0fa8328c93ee7ca52f96ccd764ccf0.zip
Rollup merge of #64986 - skinny121:fn-ptr-const-generics, r=varkor
Function pointers as const generic arguments

Makes function pointers as const generic arguments usable.

Fixes #62395

r? @varkor
Diffstat (limited to 'src/librustc_mir')
-rw-r--r--src/librustc_mir/monomorphize/collector.rs17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/librustc_mir/monomorphize/collector.rs b/src/librustc_mir/monomorphize/collector.rs
index 3f0a2674305..8f8df395053 100644
--- a/src/librustc_mir/monomorphize/collector.rs
+++ b/src/librustc_mir/monomorphize/collector.rs
@@ -1272,7 +1272,14 @@ fn collect_const<'tcx>(
 ) {
     debug!("visiting const {:?}", constant);
 
-    match constant.val {
+    let param_env = ty::ParamEnv::reveal_all();
+    let substituted_constant = tcx.subst_and_normalize_erasing_regions(
+        param_substs,
+        param_env,
+        &constant,
+    );
+
+    match substituted_constant.val {
         ConstValue::Scalar(Scalar::Ptr(ptr)) =>
             collect_miri(tcx, ptr.alloc_id, output),
         ConstValue::Slice { data: alloc, start: _, end: _ } |
@@ -1282,12 +1289,6 @@ fn collect_const<'tcx>(
             }
         }
         ConstValue::Unevaluated(def_id, substs) => {
-            let param_env = ty::ParamEnv::reveal_all();
-            let substs = tcx.subst_and_normalize_erasing_regions(
-                param_substs,
-                param_env,
-                &substs,
-            );
             let instance = ty::Instance::resolve(tcx,
                                                 param_env,
                                                 def_id,
@@ -1304,7 +1305,7 @@ fn collect_const<'tcx>(
                     tcx.def_span(def_id), "collection encountered polymorphic constant",
                 ),
             }
-        }
+        },
         _ => {},
     }
 }