[Bug target/61300] powerpc64le miscompile with K&R-style function definition at -O0

uweigand at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Jun 2 14:42:00 GMT 2014


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61300

Ulrich Weigand <uweigand at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |uweigand at gcc dot gnu.org

--- Comment #6 from Ulrich Weigand <uweigand at gcc dot gnu.org> ---
Note that either of the proposed changes (comment #3 or comment #5) would
result in an incompatible ABI change, since other compilers already implement
the parameter save area rules as defined by the ELFv2 ABI.

The basic rule is: A function body may expect the parameter save area to have
been provided on its callers stack *iff* the function has either some argument
that is passed in memory according to calling convention rules, or the function
has a variable argument list.

This is the only correct rule to be used when generating code for a function
body, no matter whether the function definition uses K&R style or not, or
whether there is a prototype in scope at the definition site or not.


Now, when generating a function *call*, we of course may follow the same rule,
which we can do if we have a prototype in scope, or else we may opt to always
provide the parameter save area (which is the only safe option if there is *no*
prototype in scope).


The problem is that the same macro REG_PARM_STACK_SPACE is currently invoked
for both function calls and function definitions, so the test for prototype_p
is wrong if we're currently compiling a function definition.  Is there a way to
inspect the REG_PARM_STACK_SPACE argument to distinguish those cases?



More information about the Gcc-bugs mailing list