This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]