This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Forward declarations and variable alignment weirdness
- From: Piotr JaroszyÅski <p dot jaroszynski at gmail dot com>
- To: gcc at gcc dot gnu dot org
- Date: Fri, 20 Aug 2010 17:20:58 +0200
- Subject: Forward declarations and variable alignment weirdness
Hello,
I have run into variable alignment issues, which turned out to be
caused by forward declaration w/o the aligned attribute repeated.
Let me walk you through simple testcases showing different alignments
I see for "misaligned" on gcc 4.4.4 and 4.5.1.
Common type definition:
struct foo { char* a; char b; };
testcase #1:
struct foo misaligned = { 0, 1 };
struct foo *ptr = &misaligned;
4.4.4: 16
4.5.1: 16
No surprise here.
testcase #2:
struct foo misaligned __attribute__((aligned(2))) = { 0, 1 };
struct foo *ptr = &misaligned;
4.4.4: 2
4.5.1: 2
Also all good.
testcase #3:
struct foo misaligned;
struct foo misaligned __attribute__((aligned(2))) = { 0, 1 };
struct foo *ptr = &misaligned;
4.4.4: 8
4.5.1: 16
Could someone explain this please? If it's a bug to not include the
aligned attribute in the forward declaration, would it be hard to add
a warning for that? Also the difference between 4.4.4 and 4.5.1 is
interesting.
--
Best Regards
Piotr JaroszyÅski