]> git.lizzy.rs Git - rust.git/commitdiff
Allow inference regions when relating consts
authorTyler Mandry <tmandry@gmail.com>
Thu, 11 Jun 2020 00:08:22 +0000 (17:08 -0700)
committerTyler Mandry <tmandry@gmail.com>
Thu, 11 Jun 2020 01:09:34 +0000 (18:09 -0700)
Fixes #73050

src/librustc_middle/ty/relate.rs
src/test/ui/async-await/issue-73050.rs [new file with mode: 0644]

index d507fcbc19404ff69002dfc65e22ba50240bbce4..aeb3a0716fb420a48a3585bed4d0aab0ea0b7517 100644 (file)
@@ -508,16 +508,7 @@ pub fn super_relate_consts<R: TypeRelation<'tcx>>(
     debug!("{}.super_relate_consts(a = {:?}, b = {:?})", relation.tag(), a, b);
     let tcx = relation.tcx();
 
-    let eagerly_eval = |x: &'tcx ty::Const<'tcx>| {
-        // FIXME(eddyb) this doesn't account for lifetime inference variables
-        // being erased by `eval`, *nor* for the polymorphic aspect of `eval`.
-        // That is, we could always use `eval` and it will just return the
-        // old value back if it doesn't succeed.
-        if !x.val.needs_infer() {
-            return x.eval(tcx, relation.param_env()).val;
-        }
-        x.val
-    };
+    let eagerly_eval = |x: &'tcx ty::Const<'tcx>| x.eval(tcx, relation.param_env()).val;
 
     // FIXME(eddyb) doesn't look like everything below checks that `a.ty == b.ty`.
     // We could probably always assert it early, as `const` generic parameters
diff --git a/src/test/ui/async-await/issue-73050.rs b/src/test/ui/async-await/issue-73050.rs
new file mode 100644 (file)
index 0000000..790f24a
--- /dev/null
@@ -0,0 +1,12 @@
+// check-pass
+// edition:2018
+
+#[allow(unused)]
+async fn foo<'a>() {
+    let _data = &mut [0u8; { 1 + 4 }];
+    bar().await
+}
+
+async fn bar() {}
+
+fn main() {}