about summary refs log tree commit diff
path: root/compiler/rustc_data_structures/src
diff options
context:
space:
mode:
authorJubilee <workingjubilee@gmail.com>2024-10-04 14:11:35 -0700
committerGitHub <noreply@github.com>2024-10-04 14:11:35 -0700
commit554daa007f663944b3411ea0713062c2646a006f (patch)
tree1a5d33290d1de826b3367ddb26e7612f558e0ea7 /compiler/rustc_data_structures/src
parent5a8fcab713678d953513ccd8524be29dba0e9330 (diff)
parent162ee75e436875afc0ff877e4fca90a13f879a1c (diff)
downloadrust-554daa007f663944b3411ea0713062c2646a006f.tar.gz
rust-554daa007f663944b3411ea0713062c2646a006f.zip
Rollup merge of #131116 - mustartt:aix-stack-size, r=petrochenkov
Increase Stack Size for AIX

On AIX, there are limited support for tail call optimizations, so we need to set a larger stack size value.

Fixes the following tests on AIX:
```
[ui] tests/ui/associated-consts/issue-93775.rs
[ui] tests/ui/closures/deeply-nested_closures.rs
[ui] tests/ui/issues/issue-74564-if-expr-stack-overflow.rs
[ui] tests/ui/parser/survive-peano-lesson-queue.rs
```
Diffstat (limited to 'compiler/rustc_data_structures/src')
-rw-r--r--compiler/rustc_data_structures/src/stack.rs4
1 files changed, 4 insertions, 0 deletions
diff --git a/compiler/rustc_data_structures/src/stack.rs b/compiler/rustc_data_structures/src/stack.rs
index 7ff1339c5ab..3d6d0003483 100644
--- a/compiler/rustc_data_structures/src/stack.rs
+++ b/compiler/rustc_data_structures/src/stack.rs
@@ -5,7 +5,11 @@ const RED_ZONE: usize = 100 * 1024; // 100k
 
 // Only the first stack that is pushed, grows exponentially (2^n * STACK_PER_RECURSION) from then
 // on. This flag has performance relevant characteristics. Don't set it too high.
+#[cfg(not(target_os = "aix"))]
 const STACK_PER_RECURSION: usize = 1024 * 1024; // 1MB
+// LLVM for AIX doesn't feature TCO, increase recursion size for workaround.
+#[cfg(target_os = "aix")]
+const STACK_PER_RECURSION: usize = 16 * 1024 * 1024; // 16MB
 
 /// Grows the stack on demand to prevent stack overflow. Call this in strategic locations
 /// to "break up" recursive calls. E.g. almost any call to `visit_expr` or equivalent can benefit