Skip to content

Commit 75cf31f

Browse files
committed
skip if val has ecaping bound vars
1 parent 37d7de3 commit 75cf31f

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

compiler/rustc_trait_selection/src/traits/wf.rs

+15-13
Original file line numberDiff line numberDiff line change
@@ -451,19 +451,21 @@ impl<'tcx> WfPredicates<'tcx> {
451451
GenericArgKind::Const(ct) => {
452452
match ct.kind() {
453453
ty::ConstKind::Unevaluated(uv) => {
454-
let obligations = self.nominal_obligations(uv.def.did, uv.substs);
455-
self.out.extend(obligations);
456-
457-
let predicate =
458-
ty::Binder::dummy(ty::PredicateKind::ConstEvaluatable(ct));
459-
let cause = self.cause(traits::WellFormed(None));
460-
self.out.push(traits::Obligation::with_depth(
461-
self.tcx(),
462-
cause,
463-
self.recursion_depth,
464-
self.param_env,
465-
predicate,
466-
));
454+
if !ct.has_escaping_bound_vars() {
455+
let obligations = self.nominal_obligations(uv.def.did, uv.substs);
456+
self.out.extend(obligations);
457+
458+
let predicate =
459+
ty::Binder::dummy(ty::PredicateKind::ConstEvaluatable(ct));
460+
let cause = self.cause(traits::WellFormed(None));
461+
self.out.push(traits::Obligation::with_depth(
462+
self.tcx(),
463+
cause,
464+
self.recursion_depth,
465+
self.param_env,
466+
predicate,
467+
));
468+
}
467469
}
468470
ty::ConstKind::Infer(_) => {
469471
let cause = self.cause(traits::WellFormed(None));
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// check-pass
2+
// edition:2021
3+
#![feature(generic_const_exprs)]
4+
#![allow(incomplete_features)]
5+
6+
#[allow(unused)]
7+
async fn foo<'a>() {
8+
let _data = &mut [0u8; { 1 + 4 }];
9+
bar().await
10+
}
11+
12+
async fn bar() {}
13+
14+
fn main() {}

0 commit comments

Comments
 (0)