Skip to content

Commit 919b61a

Browse files
committed
don't bail when encountering many placeholders
1 parent b64b25b commit 919b61a

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed

compiler/rustc_next_trait_solver/src/solve/eval_ctxt/canonical.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,8 @@ where
173173
// causing a coherence error in diesel, see #131969. We still bail with verflow
174174
// when later returning from the parent AliasRelate goal.
175175
if !self.is_normalizes_to_goal {
176-
let num_non_region_vars = canonical.variables.iter().filter(|c| !c.is_region()).count();
176+
let num_non_region_vars =
177+
canonical.variables.iter().filter(|c| !c.is_region() && c.is_existential()).count();
177178
if num_non_region_vars > self.cx().recursion_limit() {
178179
debug!(?num_non_region_vars, "too many inference variables -> overflow");
179180
return Ok(self.make_ambiguous_response_no_constraints(MaybeCause::Overflow {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//@ compile-flags: -Znext-solver
2+
//@ check-pass
3+
4+
// When canonicalizing responses, we bail if there are too many inference variables.
5+
// We previously also counted placeholders, which is incorrect.
6+
#![recursion_limit = "8"]
7+
8+
fn foo<T>() {}
9+
10+
fn bar<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>() {
11+
// The query response will contain 10 placeholders, which previously
12+
// caused us to bail here.
13+
foo::<(T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)>();
14+
}
15+
16+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
//~ ERROR overflow evaluating the requirement `Self: Trait`
2-
//~^ ERROR overflow evaluating the requirement `Self well-formed`
3-
// This is a non-regression test for issue #115351, where a recursion limit of 0 caused an ICE.
1+
//@ check-pass
42
//@ compile-flags: -Znext-solver --crate-type=lib
53

4+
// This is a non-regression test for issue #115351, where a recursion limit of 0 caused an ICE.
5+
66
#![recursion_limit = "0"]
77
trait Trait {}
88
impl Trait for u32 {}

tests/ui/traits/next-solver/overflow/recursion-limit-zero-issue-115351.stderr

-11
This file was deleted.

0 commit comments

Comments
 (0)