[Issue 2356] New: array literal as non static initializer generates horribly inefficient code.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Thu Sep 11 11:46:30 PDT 2008


http://d.puremagic.com/issues/show_bug.cgi?id=2356

           Summary: array literal as non static initializer generates
                    horribly inefficient code.
           Product: D
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Keywords: wrong-code
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla at digitalmars.com
        ReportedBy: tomas at famolsen.dk


this simple test:

void main()
{
    int[3] x = [1,2,3];
}

should just initialize x with the values 1,2,3

what happens in reality is not as nice as this output of obj2asm shows:

_Dmain:
                push    EBP
                mov     EBP,ESP
                sub     ESP,0Ch
                push    EBX
                lea     EAX,-0Ch[EBP]
                push    EAX
                push    3
                push    3
                push    2
                push    1
                push    3
                mov     ECX,offset FLAT:_D11TypeInfo_Ai6__initZ at SYM32
                push    ECX
                call    near ptr _d_arrayliteralT at PC32
                add     ESP,014h
                mov     EDX,EAX
                mov     EBX,3
                push    EDX
                push    EBX
                push    4
                call    near ptr _d_arraycopy at PC32
                xor     EAX,EAX
                add     ESP,014h
                pop     EBX
                leave
                ret


I'm marking it wrong-code, even though the code does compile and link, it's
just wrong ... I'm using 1.034 but I'd guess it's an older bug, so I'm not
marking a specific version.


-- 



More information about the Digitalmars-d-bugs mailing list