On Saturday, 4 May 2013 at 18:11:03 UTC, jerro wrote:
Is there a way to avoid default initializing a struct field in D? The following doesn't seem to work:

struct Foo
{
    int[42] buffer = void;
    int bar;
}

I think it's supposed to work. If it doesn't work, then I think it's a compiler bug.

What code have you used to test it, and what is the result you have seen?

With this code:

struct Foo {
    int[42] buffer;
    int bar;
}
int main() {
    Foo f;
    return f.bar;
}


DMD gives this code if I use void and if I don't use it:


// With void:
Dmain:
    sub ESP, 0ACh
    mov ECX, 02Bh
    push ESI
    mov ESI, offset FLAT:_D4temp3Foo6__initZ
    push EDI
    lea EDI, 8[ESP]
    rep
    movsd
    mov EAX, 0B0h[ESP]
    pop EDI
    pop ESI
    add ESP, 0ACh
    ret


// Without void:
Dmain:
    sub ESP, 0ACh
    mov ECX, 02Bh
    xor EAX, EAX
    push EDI
    lea EDI, 4[ESP]
    rep
    stosd
    mov EAX, 0ACh[ESP]
    pop EDI
    add ESP, 0ACh
    ret


Bye,
bearophile

Reply via email to