Skip to content

Commit 09ac56d

Browse files
committed
mark build::cfg::start_new_block as inline(never)
LLVM has a bug - PR32488 - where it fails to deduplicate allocas in some circumstances. The function `start_new_block` has allocas totalling 1216 bytes, and when LLVM inlines several copies of that function into the recursive function `expr::into`, that function's stack space usage goes into tens of kiBs, causing stack overflows. Mark `start_new_block` as inline(never) to keep it from being inlined, getting stack usage under control. Fixes #40493. Fixes #40573.
1 parent ccce2c6 commit 09ac56d

File tree

1 file changed

+3
-0
lines changed

1 file changed

+3
-0
lines changed

Diff for: src/librustc_mir/build/cfg.rs

+3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ impl<'tcx> CFG<'tcx> {
2525
&mut self.basic_blocks[blk]
2626
}
2727

28+
// llvm.org/PR32488 makes this function use an excess of stack space. Mark
29+
// it as #[inline(never)] to keep rustc's stack use in check.
30+
#[inline(never)]
2831
pub fn start_new_block(&mut self) -> BasicBlock {
2932
self.basic_blocks.push(BasicBlockData::new(None))
3033
}

0 commit comments

Comments
 (0)