This is the mail archive of the
mailing list for the GCC project.
[PATCH] Fix PR56344
- From: Marek Polacek <polacek at redhat dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 26 Feb 2013 19:27:33 +0100
- Subject: [PATCH] Fix PR56344
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 <firstname.lastname@example.org>
* calls.c (expand_call): Disallow passing huge arguments
--- 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");
if (store_one_arg (&args[i], argblock, flags,
adjusted_args_size.var != 0,