[PATCH] Fix PR56344
Marek Polacek
polacek@redhat.com
Tue Feb 26 18:27:00 GMT 2013
This "fixes" PR56344 by prohibiting passing arguments by value
of size >= 2^30 bytes. Probably no sane programmer would want to
do that, but it's better to issue an error than to segfault.
This would be a good opportunity to use __builtin_expect, but
we don't use that much in the codebase...
Regtested/bootstrapped on x86_64-linux, ok for trunk?
Do we need a testcase for this (compiling it is quite slow)?
2013-02-26 Marek Polacek <polacek@redhat.com>
PR middle-end/56344
* calls.c (expand_call): Disallow passing huge arguments
by value.
--- gcc/calls.c.mp 2013-02-26 17:04:33.159555349 +0100
+++ gcc/calls.c 2013-02-26 18:50:54.864084545 +0100
@@ -3037,6 +3037,14 @@ expand_call (tree exp, rtx target, int i
{
rtx before_arg = get_last_insn ();
+ /* We don't allow passing huge (> 2^30 B) arguments
+ by value. It would cause an overflow later on. */
+ if (adjusted_args_size.constant >= (1 << 30))
+ {
+ error ("passing too large argument on stack");
+ continue;
+ }
+
if (store_one_arg (&args[i], argblock, flags,
adjusted_args_size.var != 0,
reg_parm_stack_space)
Marek
More information about the Gcc-patches
mailing list