mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Ensure stack before parsing dot-or-call
There are many cases where, due to codegen or a massively unruly codebase, a deeply nested call(call(call(call(call(call(call(call(call(f()))))))))) can happen. This is a spot where it would be good to grow our stack, so that we can survive to tell the programmer their code is dubiously written.
This commit is contained in:
@@ -943,7 +943,10 @@ pub(super) fn parse_expr_dot_or_call_with(
|
||||
// Stitch the list of outer attributes onto the return value.
|
||||
// A little bit ugly, but the best way given the current code
|
||||
// structure
|
||||
let res = self.parse_expr_dot_or_call_with_(e0, lo);
|
||||
let res = ensure_sufficient_stack(
|
||||
// this expr demonstrates the recursion it guards against
|
||||
|| self.parse_expr_dot_or_call_with_(e0, lo),
|
||||
);
|
||||
if attrs.is_empty() {
|
||||
res
|
||||
} else {
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user