Rollup merge of #130617 - lcnr:nalgebra-hang-3, r=compiler-errors
bail if there are too many non-region infer vars in the query response A minimal fix for the hang in nalgebra. If the query response would result in too many distinct non-region inference variables, simply overwrite the result with overflow. This should either happen if the result already has too many distinct type inference variables, or if evaluating the query encountered a lot of ambiguous associated types. In both cases it's straightforward to wait until the aliases are no longer ambiguous and then try again. r? `@compiler-errors`
This commit is contained in:
commit
7adf4c2b6f
5 changed files with 27 additions and 1 deletions
|
@ -157,6 +157,17 @@ where
|
|||
},
|
||||
);
|
||||
|
||||
// HACK: We bail with overflow if the response would have too many non-region
|
||||
// inference variables. This tends to only happen if we encounter a lot of
|
||||
// ambiguous alias types which get replaced with fresh inference variables
|
||||
// during generalization. This prevents a hang in nalgebra.
|
||||
let num_non_region_vars = canonical.variables.iter().filter(|c| !c.is_region()).count();
|
||||
if num_non_region_vars > self.cx().recursion_limit() {
|
||||
return Ok(self.make_ambiguous_response_no_constraints(MaybeCause::Overflow {
|
||||
suggest_increasing_limit: true,
|
||||
}));
|
||||
}
|
||||
|
||||
Ok(canonical)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue