RE: structure packing.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> 
> Hi!
> 
> I have a strange problem with some of my source code. I have something
> similar as the small test case below, which I compile with multiple
> different compilers (and compiler versions), including visual c++
2003,
> 2005 and 2008 and GCC 3.3 and 4.2.
> 
> It seems that gcc 4.2 makes some troubles ;) could please somebody
take
> a look at the things below, and tell me wether I'm just blind and
dumb,
> or there is a problem with gcc?

Some more testing revealed that using the gcc_struct attribute
additionally, makes it work.... is there any explanation for this? I
thought gcc_struct would be the default? (btw. I _am_ on windows, but
using interix, which I think should be pretty much unix, and nearly no
windows...).

Cheers, Markus

> 
> Thanks in advance, Cheers, Markus
> 
> mduft build $ cat zz.c
> #include <stdio.h>
> 
> typedef struct __attribute__((packed, aligned(2))) {
> 	unsigned int a;
> 	unsigned short b;
> 	unsigned int c;
> } teststruct;
> 
> int main(void) {
> 	printf("uint: %d, ushort: %d, struct: %d (should be %d)\n",
> 		sizeof(unsigned int), sizeof(unsigned short),
> sizeof(teststruct),
> 		(sizeof(unsigned int) * 2) + sizeof(unsigned short));
> }
> mduft build $ gcc zz.c
> mduft build $ ./a.out
> uint: 4, ushort: 2, struct: 12 (should be 10)
> 
> mduft build $ gcc -v
> Using built-in specs.
> Target: i586-pc-interix6.0
> Configured with: /opt/gentoo.system/var/tmp/portage/sys-devel/gcc-
> 4.2.4-r00.1/work/gcc-4.2.4/configure --prefix=/opt/gentoo.system/usr
--
> bindir=/opt/gentoo.system/usr/i586-pc-interix6.0/gcc-bin/4.2.4 --
> includedir=/opt/gentoo.system/usr/lib/gcc/i586-pc-
> interix6.0/4.2.4/include --datadir=/opt/gentoo.system/usr/share/gcc-
> data/i586-pc-interix6.0/4.2.4 --
> mandir=/opt/gentoo.system/usr/share/gcc-data/i586-pc-
> interix6.0/4.2.4/man --infodir=/opt/gentoo.system/usr/share/gcc-
> data/i586-pc-interix6.0/4.2.4/info --with-gxx-include-
> dir=/opt/gentoo.system/usr/lib/gcc/i586-pc-
> interix6.0/4.2.4/include/g++-v4 --host=i586-pc-interix6.0
--build=i586-
> pc-interix6.0 --disable-altivec --disable-nls --with-system-zlib --
> disable-checking --disable-werror --enable-secureplt
--disable-multilib
> --disable-libmudflap --disable-libssp --disable-libgcj --enable-
> languages=c,c++,treelang --enable-shared --enable-threads=posix
--with-
> local-prefix=/opt/gentoo.system/usr
> Thread model: posix
> gcc version 4.2.4 (Gentoo 4.2.4-r00.1 p1.0)
> 
> mduft build $ /opt/gcc.3.3/bin/gcc zz.c
> mduft build $ ./a.out
> uint: 4, ushort: 2, struct: 10 (should be 10)
> mduft build $



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux