This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/18761] C++ ABI bug on OS X with doubles
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 1 Dec 2004 18:56:53 -0000
- Subject: [Bug c++/18761] C++ ABI bug on OS X with doubles
- References: <20041201184702.18761.mmitchel@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From pinskia at gcc dot gnu dot org 2004-12-01 18:56 -------
The problem has nothing to do with enums at all but doubles, if the double is the second element in
the union it works. I do know that that would be correct for structs but I forgot about the rules for
unions. Darwin uses the same rule as AIX uses for alignment so it is also a problem there too if this is
a bug (someone will have to look it up).
In 4.0.0 we get:
Alignment of AlignA = 8
Alignment of AlignB = 4
which is what I had expected with my explaination about.
This gives the same output as the enum case (to show it has nothing to do with enums):
extern "C" int printf (const char*, ...);
union A {
double d;
};
union B {
int i;
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));
}
--
What |Removed |Added
----------------------------------------------------------------------------
GCC target triplet|powerpc-apple-darwin7.4.0 |ppc-darwin, ppc-aix
Keywords| |ABI, wrong-code
Summary|C++ ABI bug on OS X with |C++ ABI bug on OS X with
|enums |doubles
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18761