Bug#521622: gdc-4.1: struct layout not the same as gcc on i386
Package: gdc-4.1
Version: 0.25-4.1.2-23.2
Severity: normal
gdc on i386 inserts four bytes of padding in this struct (so that it's
total size is 16 bytes), while gcc doesn't:
struct test {
int mode;
double mu;
};
According to http://www.digitalmars.com/d/1.0/abi.html, structs should
conform "to the target's C ABI struct layout", so it looks like this
is a bug.
Two small test programs are attached.
-- System Information:
Debian Release: squeeze/sid
APT prefers unstable
APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 2.6.26-1-amd64 (SMP w/1 CPU core)
Locale: LANG=nl_BE.UTF-8, LC_CTYPE=nl_BE.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages gdc-4.1 depends on:
ii g++-4.1 4.1.2-25 The GNU C++ compiler
ii gcc-4.1-base 4.1.2-25 The GNU Compiler Collection (base
ii libc6 2.9-6 GNU C Library: Shared libraries
ii libgcc1 1:4.3.3-5 GCC support library
ii libphobos-4.1-dev 0.25-4.1.2-23.2 The phobos D standard library
ii libstdc++6 4.3.3-5 The GNU Standard C++ Library v3
gdc-4.1 recommends no packages.
gdc-4.1 suggests no packages.
-- no debconf information
import std.stdio;
extern(C)
struct test {
int mode;
double mu;
};
void main()
{
writefln("test.sizeof: ", test.sizeof);
writefln("test.mode.offsetof: ", test.mode.offsetof);
writefln("test.mu.offsetof: ", test.mu.offsetof);
}
#include <stdio.h>
#include <stddef.h>
struct test {
int mode;
double mu;
};
int main()
{
printf("test.sizeof: %zd\n", sizeof(struct test));
printf("test.mode.offsetof: %zd\n", offsetof(struct test, mode));
printf("test.mu.offsetof: %zd\n", offsetof(struct test, mu));
return 0;
}
Reply to: