]> git.lizzy.rs Git - rust.git/commitdiff
skip if val has ecaping bound vars
authorouz-a <oguz.agcayazi@gmail.com>
Wed, 14 Dec 2022 10:59:29 +0000 (13:59 +0300)
committerouz-a <oguz.agcayazi@gmail.com>
Wed, 14 Dec 2022 11:05:44 +0000 (14:05 +0300)
compiler/rustc_trait_selection/src/traits/wf.rs
src/test/ui/const-generics/issue-105689.rs [new file with mode: 0644]

index e47ba64245f50732f0b95a7eddf143b5341bc555..fe2d53a7aad73ce020796f7bf446285d953c7426 100644 (file)
@@ -451,19 +451,21 @@ fn compute(&mut self, arg: GenericArg<'tcx>) {
                 GenericArgKind::Const(ct) => {
                     match ct.kind() {
                         ty::ConstKind::Unevaluated(uv) => {
-                            let obligations = self.nominal_obligations(uv.def.did, uv.substs);
-                            self.out.extend(obligations);
-
-                            let predicate =
-                                ty::Binder::dummy(ty::PredicateKind::ConstEvaluatable(ct));
-                            let cause = self.cause(traits::WellFormed(None));
-                            self.out.push(traits::Obligation::with_depth(
-                                self.tcx(),
-                                cause,
-                                self.recursion_depth,
-                                self.param_env,
-                                predicate,
-                            ));
+                            if !ct.has_escaping_bound_vars() {
+                                let obligations = self.nominal_obligations(uv.def.did, uv.substs);
+                                self.out.extend(obligations);
+
+                                let predicate =
+                                    ty::Binder::dummy(ty::PredicateKind::ConstEvaluatable(ct));
+                                let cause = self.cause(traits::WellFormed(None));
+                                self.out.push(traits::Obligation::with_depth(
+                                    self.tcx(),
+                                    cause,
+                                    self.recursion_depth,
+                                    self.param_env,
+                                    predicate,
+                                ));
+                            }
                         }
                         ty::ConstKind::Infer(_) => {
                             let cause = self.cause(traits::WellFormed(None));
diff --git a/src/test/ui/const-generics/issue-105689.rs b/src/test/ui/const-generics/issue-105689.rs
new file mode 100644 (file)
index 0000000..4237b3c
--- /dev/null
@@ -0,0 +1,14 @@
+// check-pass
+// edition:2021
+#![feature(generic_const_exprs)]
+#![allow(incomplete_features)]
+
+#[allow(unused)]
+async fn foo<'a>() {
+    let _data = &mut [0u8; { 1 + 4 }];
+    bar().await
+}
+
+async fn bar() {}
+
+fn main() {}