Commit 27183bba by Uros Bizjak

re PR target/12329 (x86: local function declared with attribute((regparm(3)))…

re PR target/12329 (x86: local function declared with attribute((regparm(3))) gets corrupted parent frame pointer)

        PR target/12329
        * config/i386/i386.c (ix86_function_regparm): Error if regparm(3)
        attribute is used for nested functions.

testsuite/ChangeLog:

        PR target/12329
        * gcc.target/i386/pr12329.c: New test.

From-SVN: r133954
parent 93f14b2f
2008-04-05 Uros Bizjak <ubizjak@gmail.com>
PR target/12329
* config/i386/i386.c (ix86_function_regparm): Error if regparm(3)
attribute is used for nested functions.
2008-04-05 Jan Hubicka <jh@suse.cz>
* emit-rtl.c (init_emit): xcalloc regno_pointer_align.
......@@ -13,8 +19,8 @@
it out based on pass type.
(register_dump_files_1): Likewise.
(init_optimization_passes): Update register_one_dump_file calls.
(execute_one_pass): Sanity check that IPA passes are called at IPA level
and RTL passes at RTL level.
(execute_one_pass): Sanity check that IPA passes are called at IPA
level and RTL passes at RTL level.
(execute_pass_list): IPA pass can not be after or subpass of
GIMPLE/RTL pass.
(execute_ipa_pass_list): Handle IPA subpasses of IPA subpasses and
......
......@@ -3250,12 +3250,33 @@ ix86_function_regparm (const_tree type, const_tree decl)
tree attr;
int regparm = ix86_regparm;
static bool error_issued;
if (TARGET_64BIT)
return regparm;
attr = lookup_attribute ("regparm", TYPE_ATTRIBUTES (type));
if (attr)
return TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
{
regparm
= TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (attr)));
if (decl && TREE_CODE (decl) == FUNCTION_DECL)
{
/* We can't use regparm(3) for nested functions because
these pass static chain pointer in %ecx register. */
if (!error_issued && regparm == 3
&& decl_function_context (decl)
&& !DECL_NO_STATIC_CHAIN (decl))
{
error ("nested functions are limited to 2 register parameters");
error_issued = true;
return 0;
}
}
return regparm;
}
if (lookup_attribute ("fastcall", TYPE_ATTRIBUTES (type)))
return 2;
......
2008-04-06 Uros Bizjak <ubizjak@gmail.com>
PR target/12329
* gcc.target/i386/pr12329.c: New test.
2008-04-05 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/pr35823.adb: Rename to size_attribute.adb.
......@@ -163,12 +168,12 @@
* lib/gfortran-dg.exp: New harness to compile Fortran progs
with all combinations of debug options available on target.
* gfortran.dg/debug/debug.exp: Ditto.
* gfortran.dg/debug/trivial.f: Ditto.
* gfortran.dg/debug/pr35154-stabs.f: New test case for
.stabs functionality.
* gfortran.dg/debug/pr35154-dwarf2.f: New test case for
DWARF functionality.
* gfortran.dg/debug/debug.exp: Ditto.
* gfortran.dg/debug/trivial.f: Ditto.
* gfortran.dg/debug/pr35154-stabs.f: New test case for
.stabs functionality.
* gfortran.dg/debug/pr35154-dwarf2.f: New test case for
DWARF functionality.
2008-04-01 Volker Reichelt <v.reichelt@netcologne.de>
/* { dg-do compile } */
/* { dg-require-effective-target ilp32 } */
/* { dg-options "-O2" } */
extern void abort (void);
int test_nested (int i)
{
int __attribute__ ((__noinline__, __regparm__(3))) foo(int j, int k, int l)
{ /* { dg-error "nested functions are limited to 2 register parameters" } */
return i + j + k + l;
}
return foo (i, i+1, i+2);
}
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