This is the mail archive of the gcc-bugs@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]

[Bug c++/18761] C++ ABI bug on OS X with doubles


------- 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


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