title: Why does main() compiled by D have a 32-bit return value on a 64-bit machine?
body: <p>Here is a very small source file in D:</p>
  
  <pre><code>void main()
  {
  }
  </code></pre>
  
  <p>and here objdump's disassembly of the .o file:</p>
  
  <pre><code>Disassembly of section .text._Dmain:
  0000000000000000 &lt;_Dmain&gt;:
  void main()
     0:   55                      push   %rbp
     1:   48 8b ec                mov    %rsp,%rbp
     4:   31 c0                   xor    %eax,%eax
  {
     6:   5d                      pop    %rbp
     7:   c3                      retq   
  </code></pre>
  
  <p>The compiler is DMD64 D Compiler v2.056 running on an x86_64 Linux machine.  </p>
  
  <p>What I wonder is why only 32-bit EAX is being cleared rather than the whole 64-bit RAX?  I assume this is a return value, required just as in a C program even if not acknowledged in D source.  </p>