Hello. In order to not cause a stack overflow, lets use a vector allocated on heap instead of the one created by XALLOCVEC.
Patch can bootstrap on ppc64le-redhat-linux and survives regression tests. Ready to be installed? Martin
>From c71fadc2104c729ae5625e06c54239998dd794a5 Mon Sep 17 00:00:00 2001 From: marxin <mli...@suse.cz> Date: Mon, 13 Feb 2017 09:25:36 +0100 Subject: [PATCH] Replace XALLOCAVEC with XCNEWVEC (PR c/79471). gcc/ChangeLog: 2017-02-13 Martin Liska <mli...@suse.cz> PR c/79471 * calls.c (expand_call): Replace XALLOCAVEC with XCNEWVEC. --- gcc/calls.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcc/calls.c b/gcc/calls.c index 7b45b9a111d..6d5ef4e02a0 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -3262,8 +3262,7 @@ expand_call (tree exp, rtx target, int ignore) n_named_args = num_actuals; /* Make a vector to hold all the information about each arg. */ - args = XALLOCAVEC (struct arg_data, num_actuals); - memset (args, 0, num_actuals * sizeof (struct arg_data)); + args = XCNEWVEC (struct arg_data, num_actuals); /* Build up entries in the ARGS array, compute the size of the arguments into ARGS_SIZE, etc. */ @@ -4265,6 +4264,7 @@ expand_call (tree exp, rtx target, int ignore) currently_expanding_call--; free (stack_usage_map_buf); + free (args); /* Join result with returned bounds so caller may use them if needed. */ target = chkp_join_splitted_slot (target, valbnd); -- 2.11.0