On 86_64:
void x()
{
void y(void);
y();
}
disassembles to
x:
jmp y
whereas
void x()
{
void y();
y();
}
disassembles to
x:
xorl %eax, %eax
jmp y
IOW, why does eax need to be zeroed before making a prototypeless call?