re PR target/34982 (calling a function with undefined parameters causes segmentation fault at -O1 or higher)

PR target/34982
	* i386.c (init_cumulative_args): Use real function declaration when
	calling locally.

From-SVN: r131966
This commit is contained in:
Jan Hubicka 2008-01-30 16:54:14 +01:00 committed by Jan Hubicka
parent 7f92e24236
commit d6951cae07
4 changed files with 35 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2008-01-30 Jan Hubicka <jh@suse.cz>
PR target/34982
* i386.c (init_cumulative_args): Use real function declaration when
calling locally.
2008-01-30 Richard Sandiford <rsandifo@nildram.co.uk>
PR rtl-optimization/34998

View File

@ -3432,6 +3432,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */
rtx libname, /* SYMBOL_REF of library name or 0 */
tree fndecl)
{
struct cgraph_local_info *i = fndecl ? cgraph_local_info (fndecl) : NULL;
memset (cum, 0, sizeof (*cum));
/* Set up the number of registers to use for passing arguments. */
@ -3442,6 +3443,15 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, /* Argument info to initialize */
cum->mmx_nregs = MMX_REGPARM_MAX;
cum->warn_sse = true;
cum->warn_mmx = true;
/* Because type might mismatch in between caller and callee, we need to
use actual type of function for local calls.
FIXME: cgraph_analyze can be told to actually record if function uses
va_start so for local functions maybe_vaarg can be made aggressive
helping K&R code.
FIXME: once typesytem is fixed, we won't need this code anymore. */
if (i && i->local)
fntype = TREE_TYPE (fndecl);
cum->maybe_vaarg = (fntype
? (!prototype_p (fntype) || stdarg_p (fntype))
: !libname);

View File

@ -1,3 +1,8 @@
2008-01-30 Jan Hubicka <jh@suse.cz>
PR target/34982
* gcc.c-torture/execute/pr34982.c: New testcase
2008-01-30 Andreas Krebbel <krebbel1@de.ibm.com>
* gcc.target/s390/tf_to_di-1.c: New testcase.

View File

@ -0,0 +1,14 @@
extern void abort (void);
static void something();
int main()
{
something(-1);
}
static void something(int i)
{
if (i != -1)
abort ();
}