While inspecting assembly code generated by DMD I found this
weird bit of assembly:

0000000000000000 <_Dmain>:
    0:  55                      push   rbp
    1:  48 8b ec                mov    rbp,rsp
    4:  48 83 ec 10             sub    rsp,0x10
    8:  c7 45 f8 05 00 00 00    mov    DWORD PTR [rbp-0x8],0x5
    f:  c7 45 f8 06 00 00 00    mov    DWORD PTR [rbp-0x8],0x6
   16:  48 89 ef                mov    rdi,rbp
   19:  e8 00 00 00 00          call   1e <_Dmain+0x1e>
   1e:  31 c0                   xor    eax,eax
   20:  c9                      leave
   21:  c3                      ret
   22:  66 0f 1f 44 00 00       nop    WORD PTR [rax+rax*1+0x0]

It seems to call/jump to the operation right after it. Why does
it do that?

Code:

void main() {
        int x = 5;
        void innerFunc() {
                import std.stdio;
                writeln(x);
        }
        x = 6;
        innerFunc();
}

Also I don't really get where it's supposed to call innerFunc. It
seems it's never mentioned inside the generated main function.

Reply via email to