On Thu, Nov 21, 2019 at 12:18 AM Janne Blomqvist
<[email protected]> wrote:
>
> On Wed, Nov 20, 2019 at 11:35 PM Thomas König <[email protected]> wrote:
> > (Why do we zero %eax
> > before each call? It should not be a variadic call right?)
>
> Not sure. Maybe some belt and suspenders thing? I guess someone better
> versed in ABI minutiae knows better. It's not Fortran-specific though,
> the C frontend does the same when calling a void function.
Ah, scratch that, it is some varargs-thing, I had forgot that a C
function with no arguments or lacking a prototype is considered a
varargs. The code
void foo();
void bar(void);
void testfoo()
{
foo();
}
void testbar()
{
bar();
}
void testunprototyped()
{
baz();
}
generates code (elided scaffolding):
testfoo:
xorl %eax, %eax
jmp foo
testbar:
jmp bar
testunprototyped:
xorl %eax, %eax
jmp baz
So probably this is due to the Fortran procedures lacking an interface
being considered varargs by the caller. Starts to smell like some
leftover from PR 87689?
--
Janne Blomqvist