This program does not give the same alignment for A and B, which is very weird,
since the only difference is that B contains a declaration of a nested type.
The culprit here is the Darwin round_type_align code. I do not know if this bug
still occurs with GCC 4.0.
extern "C" int printf (const char*, ...);
union A {
double d;
};
union B {
enum E { e };
double d;
};
struct AlignA {
char c;
A a;
};
struct AlignB {
char c;
B b;
};
int main () {
printf ("Alignment of AlignA = %d\n", __alignof__ (AlignA));
printf ("Alignment of AlignB = %d\n", __alignof__ (AlignB));
}
--
Summary: C++ ABI bug on OS X with enums
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mmitchel at gcc dot gnu dot org
CC: gcc-bugs at gcc dot gnu dot org
GCC target triplet: powerpc-apple-darwin7.4.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18761