[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2010-03-22 Thread mrs at gcc dot gnu dot org


--- Comment #7 from mrs at gcc dot gnu dot org  2010-03-22 23:13 ---
Subject: Bug 23071

Author: mrs
Date: Mon Mar 22 23:13:10 2010
New Revision: 157654

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=157654
Log:
PR target/23071
* config/rs6000/rs6000.c (darwin_rs6000_special_round_type_align):
Don't overly align based upon packed packed fields.

Added:
trunk/gcc/testsuite/gcc.target/powerpc/darwin-abi-12.c
Modified:
trunk/gcc/ChangeLog
trunk/gcc/config/rs6000/rs6000.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071



[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2010-03-22 Thread mikestump at comcast dot net


--- Comment #8 from mikestump at comcast dot net  2010-03-22 23:18 ---
The previous behavior was fairly broken, adding packed, _increased_ the
alignment.  A user that adds packing, never wants more alignment:

struct Test {
  double D  __attribute__((packed,aligned(4)));
  short X;
} x;

struct {
  char x;
  struct Test t;
} b = { 1, { 2, 3}};

compared to:

struct Test {
  double D /*  __attribute__((packed,aligned(4))) */;
  short X;
} x;

struct {
  char x;
  struct Test t;
} b = { 1, { 2, 3}};


-- 

mikestump at comcast dot net changed:

   What|Removed |Added

 CC||mikestump at comcast dot net


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071



[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2010-03-22 Thread mrs at gcc dot gnu dot org


--- Comment #9 from mrs at gcc dot gnu dot org  2010-03-22 23:21 ---
This has now been fixed.


-- 

mrs at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071



[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2010-03-22 Thread mrs at gcc dot gnu dot org


-- 

mrs at gcc dot gnu dot org changed:

   What|Removed |Added

   Target Milestone|--- |4.5.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071



[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread pinskia at gcc dot gnu dot org

--- Additional Comments From pinskia at gcc dot gnu dot org  2005-07-26 
13:21 ---
I still don't believe this is a bug.
As the alignment of whole struct is still 8 as double is first, even if the 
alignment of that double is 4.

-- 
   What|Removed |Added

 CC||pinskia at gcc dot gnu dot
   ||org
   GCC host triplet|powerpc-darwin-*|
 GCC target triplet||powerpc-darwin, powerpc-aix


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread dje at gcc dot gnu dot org

--- Additional Comments From dje at gcc dot gnu dot org  2005-07-26 14:08 
---
The ABI specifies the alignment of the entire record is doubleword if the 
first field is an FP double, regardless of the alignment of the type itself.

-- 
   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||WONTFIX


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread sabre at nondot dot org

--- Additional Comments From sabre at nondot dot org  2005-07-26 16:25 
---
Okay, in that case, how does one change the alignment of the structure?  The 
only way I'm aware of to 
do this is with attribute packed, but that will also modify the inter-field 
padding of the structure.  For 
example, in this case:

struct Test {
  double D __attribute__((packed,aligned(4)));
  short X;
  int Y;
  short Z;
} __attribute__((packed,aligned(4)));

Not only is the alignment of the structure reduced to 4 bytes, the structure is 
also packed, resulting in 
the 'int' being unaligned and the size of the structure being 16 bytes (instead 
of 20).

it sure would be nice if you could use 'attribute aligned' to reduce alignment 
without attribute packed

-Chris

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread ian at airs dot com

--- Additional Comments From ian at airs dot com  2005-07-26 16:55 ---
The whole point of attribute ((packed)) is to change the ABI.  If it can't
change the ABI, it is meaningless.  So I don't find the argument based on the
ABI to be particularly convincing.

-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread dje at watson dot ibm dot com

--- Additional Comments From dje at watson dot ibm dot com  2005-07-26 
16:58 ---
Subject: Re:  Darwin alignment ignores attribute packed for first 'double' 
element of a struct 

If Chris and Apple want to change the behavior for Darwin, be my
guest. 

David


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread dje at gcc dot gnu dot org

--- Additional Comments From dje at gcc dot gnu dot org  2005-07-26 17:02 
---
reopen

-- 
   What|Removed |Added

 Status|RESOLVED|UNCONFIRMED
 Resolution|WONTFIX |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071


[Bug target/23071] Darwin alignment ignores attribute packed for first 'double' element of a struct

2005-07-26 Thread dje at gcc dot gnu dot org


-- 
   What|Removed |Added

 AssignedTo|dje at watson dot ibm dot   |unassigned at gcc dot gnu
   |com |dot org
 Status|UNCONFIRMED |NEW


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23071