On Thu, Nov 21, 2019 at 12:18 AM Janne Blomqvist <blomqvist.ja...@gmail.com> wrote: > > On Wed, Nov 20, 2019 at 11:35 PM Thomas König <t...@tkoenig.net> 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