Commit 6779c87f authored by Michael Beck's avatar Michael Beck
Browse files

disable inline of functions which call alloca(), causes stack overrun in 176.gcc

parent 6b0ac742
......@@ -753,6 +753,22 @@ static void find_addr(ir_node *node, void *env) {
is_Start(get_Proj_pred(node)) &&
get_Proj_proj(node) == pn_Start_P_value_arg_base) {
*allow_inline = 0;
} else if (is_Alloc(node) && get_Alloc_where(node) == stack_alloc) {
/* From GCC:
* Refuse to inline alloca call unless user explicitly forced so as this
* may change program's memory overhead drastically when the function
* using alloca is called in loop. In GCC present in SPEC2000 inlining
* into schedule_block cause it to require 2GB of ram instead of 256MB.
* Sorryly this is true with our implementation also.
* Moreover, we cannot differentiate between alloca() and VLA yet, so this
* disables inlining of functions using VLA (with are completely save).
* 2 Solutions:
* - add a flag to the Alloc node for "real" alloca() calls
* - add a new Stack-Restore node at the end of a function using alloca()
*allow_inline = 0;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment