diff options
| author | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2022-12-19 21:24:09 +0100 | 
|---|---|---|
| committer | Ulrich Weigand <ulrich.weigand@de.ibm.com> | 2022-12-19 21:24:09 +0100 | 
| commit | 6bb2bda23eb0ced0375ebd119454f8e95dc36db8 (patch) | |
| tree | 065debed63095b384329af8030eb28c601fd24ff /src/test/rustdoc-ui/const-evalutation-ice.rs | |
| parent | 4653c93e4442d88bf3278067183c8fdc0be74a1f (diff) | |
| download | rust-6bb2bda23eb0ced0375ebd119454f8e95dc36db8.tar.gz rust-6bb2bda23eb0ced0375ebd119454f8e95dc36db8.zip | |
Fix stack overflow in recursive AST walk in early lint
The src/test/ui/issues/issue-74564-if-expr-stack-overflow.rs test case
added to verify https://github.com/rust-lang/rust/issues/74564 still
crashes with a stack overflow on s390x-ibm-linux.
Symptom is a very deep recursion in compiler/rustc_lint/src/early.rs:
    fn visit_expr(&mut self, e: &'a ast::Expr) {
        self.with_lint_attrs(e.id, &e.attrs, |cx| {
            lint_callback!(cx, check_expr, e);
            ast_visit::walk_expr(cx, e);
        })
    }
(where walk_expr recursively calls back into visit_expr).  The crash
happens at a nesting depth of over 17000 stack frames when using the
default 8 MB stack size on s390x.
This patch fixes the problem by adding a ensure_sufficient_stack
call to the with_lint_attrs routine (which also should take care
of all the other mutually recursive visitors here).
Fixes part of https://github.com/rust-lang/rust/issues/105383.
Diffstat (limited to 'src/test/rustdoc-ui/const-evalutation-ice.rs')
0 files changed, 0 insertions, 0 deletions
