Rollup merge of #41015 - arielb1:new-block-stack, r=alexcrichton
mark build::cfg::start_new_block as inline(never) LLVM has a bug - [PR32488](https://bugs.llvm.org//show_bug.cgi?id=32488) - 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. r? @eddyb
This commit is contained in:
commit
b712950d7b
1 changed files with 3 additions and 0 deletions
|
@ -25,6 +25,9 @@ impl<'tcx> CFG<'tcx> {
|
|||
&mut self.basic_blocks[blk]
|
||||
}
|
||||
|
||||
// llvm.org/PR32488 makes this function use an excess of stack space. Mark
|
||||
// it as #[inline(never)] to keep rustc's stack use in check.
|
||||
#[inline(never)]
|
||||
pub fn start_new_block(&mut self) -> BasicBlock {
|
||||
self.basic_blocks.push(BasicBlockData::new(None))
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue