Thread overview
sizeof
Jan 01, 2011
Ellery Newcomer
Jan 02, 2011
Manfred_Nowak
Jan 02, 2011
Ellery Newcomer
Jan 02, 2011
Manfred_Nowak
January 01, 2011
Hello. Been trying to link to some C code with gdc on 64 bit, and I've been racking my brain over the following:

//tok.d
import std.stdio;
struct x {
    union _u_{
        ulong uq;
        struct _s_ {
            ushort dw;
            uint dd;
        };
        _s_ s;
    };
    _u_ u;
    ushort zz;
}

void main(){
    writeln(x.sizeof);
}


//tok.c
#include <stdint.h>
#include <stdio.h>

struct x {
    union {
        uint64_t uq;
        struct {
            uint16_t dw;
            uint32_t dd;
        } s;
    } u;
    uint16_t zz;
};

void main(){
    printf("%d\n", sizeof(struct x));
}


the d code prints 12, and the C code prints 16. Should I be expecting the two to be the same?
January 02, 2011
Ellery Newcomer wrote:

> d code prints 12

prints 16 ( DMD 2.051 on win32)
-manfred
January 02, 2011
curious. prints 12, DMD 2.051 linux

On 01/01/2011 06:15 PM, Manfred_Nowak wrote:
> Ellery Newcomer wrote:
>
>> d code prints 12
>
> prints 16 ( DMD 2.051 on win32)
> -manfred
January 02, 2011
Ellery Newcomer wrote:

> prints 12, DMD 2.051 linux

So we have:
( linux32 , dmd 2.051) -> 12
( linux32 , gdc)       -> 12
( linux64 , gdc)       -> 12
( linux64 , ldc)       -> 16
( win32   , dmd 2.051) -> 16
( cygwin32, gdc)       -> 16

Congrats Ellery: this looks like a stairway to hell.

-manfred