[Issue 3421] Inline assembler problems accessing static variables

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Oct 20 15:29:30 PDT 2009


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



--- Comment #2 from Graham <grahamc001uk at yahoo.co.uk> 2009-10-20 15:29:29 PDT ---
Thanks.

Is there any way to put __gshared or immutable into a typedef or alias so that
conditional compilation can allow code to compile with both DMD v1 and DMD v2 ?

I thought something like this would do it:

import std.stdio;

static __gshared uint value1 = 3;
static immutable uint value2 = 4;

version(D_Version2) {
    mixin("typedef static __gshared uint __gshared_uint;");
    mixin("typedef static immutable uint immutable_uint;");
}
else {
    typedef static uint __gshared_uint;
    typedef static uint immutable_uint;
}

__gshared_uint value3 = 5;
immutable_uint value4 = 6;

void main() {
    uint save1, save2, save3, save4;
    asm {
        mov        EAX,value1;
        mov        save1,EAX;
        mov        EAX,value2;
        mov        save2,EAX;
        mov        EAX,value3;
        mov        save3,EAX;
        mov        EAX,value4;
        mov        save4,EAX;
    }
    writefln("save1 %d save2 %d save3 %d save4 %d", save1, save2, save3,
save4);
}

but it does not:
dmd -vtls test03
test03.d(15): value3 is thread local
test03.d(16): value4 is thread local

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list