[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From wilson at gcc dot gnu dot org 2005-08-16 21:32 --- The MEMBER_TYPE_FORCES_BLK definition was changed Aug 3. http://gcc.gnu.org/ml/gcc-patches/2005-08/msg00166.html The Aug 4 ia64-hp-hpux11 testsuite reports no longer show any transparent union failures. http://gcc.gnu.org/ml/gcc-testresults/2005-08/msg00223.html Since MEMBER_TYPE_FORCES_BLK is still defined for TFmode, one can still reproduce this problem if you use a transparent union whose first member is a long double. It is believed that defining MEMBER_TYPE_FORCES_BLK is also not needed for TFmode anymore, but someone needs to do rigorous testing to verify that this change does not introduce any ABI changes. Eric Botcazou didn't need this fixed for Ada, so he didn't do this testing. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From jsm28 at gcc dot gnu dot org 2005-07-30 19:19 --- My newly added test transparent-union-4.c fails on ia64-hpux for the same reason. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From pinskia at gcc dot gnu dot org 2005-05-22 05:49 --- Confirmed. -- What|Removed |Added Status|UNCONFIRMED |NEW Ever Confirmed||1 Last reconfirmed|-00-00 00:00:00 |2005-05-22 05:49:15 date|| http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From wilson at specifixinc dot com 2005-02-21 23:11 --- Subject: Re: gcc.dg/transparent-union-* fail on ia64-hpux giovannibajo at libero dot it wrote: --- Additional Comments From giovannibajo at libero dot it 2005-02-20 13:03 --- Jim, these are transparent unions, I thought that they were passed using the convention of the first element in the union. Yes, they are. And yes, MEMBER_TYPE_FORCES_BLK is causing the problem. Look at handle_transparent_union_attribute, and note the mode checks it is performing. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From wilson at specifixinc dot com 2005-02-21 23:19 --- Subject: Re: gcc.dg/transparent-union-* fail on ia64-hpux giovannibajo at libero dot it wrote: --- Additional Comments From giovannibajo at libero dot it 2005-02-20 13:03 --- Jim, these are transparent unions, I thought that they were passed using the convention of the first element in the union. By the way, I probably wasn't clear about this, but I haven't made any attempt to debug or analyze the problem. I'm just trying to point people at the cause of the first error, which was obvious to me just from reading the bug report. And that is MEMBER_TYPE_FORCES_BLK. There may also be other problems here. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From giovannibajo at libero dot it 2005-02-20 13:03 --- Jim, these are transparent unions, I thought that they were passed using the convention of the first element in the union. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From pinskia at gcc dot gnu dot org 2005-02-19 21:24 --- Hmm, Does anyone know how these union are supposed to be passed on ia64-*-hpux, if by referrence then the warning is correct and the testcase should not be tested on this target. This is an ABI Issue. -- What|Removed |Added Keywords||ABI http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094
[Bug target/20094] gcc.dg/transparent-union-* fail on ia64-hpux
--- Additional Comments From wilson at specifixinc dot com 2005-02-19 23:15 --- Subject: Re: gcc.dg/transparent-union-* fail on ia64-hpux pinskia at gcc dot gnu dot org wrote: --- Additional Comments From pinskia at gcc dot gnu dot org 2005-02-19 21:24 --- Hmm, Does anyone know how these union are supposed to be passed on ia64-*-hpux, if by referrence then the warning is correct and the testcase should not be tested on this target. This is an ABI Issue. unions get passed right-aligned little-endian and left-aligned big-endian. Since linux is little-endian, and HPUX is big-endian, only HPUX has a problem here. HPUX defines MEMBER_TYPE_FORCES_BLK to make this work. There are other ways to solve this problem used by other targets, for instance, defining BLOCK_REG_PADDING for HPUX. Getting BLOCK_REG_PADDING to work can be tricky though. It looks like the ia64/hpux.h is the only one that defines MEMBER_TYPE_FORCES_BLK that can trigger this problem, since the others don't trigger on pointer or integer types. It appears that MEMBER_TYPE_FORCES_BLK should not be used for a transparent union, or should be used differently. This check could perhaps be done unconditionally in stor-layout.c. This might be a simple solution. Or maybe we can pass the union/structure type to MEMBER_TYPE_FORCES_BLK and modify the ia64/hpux.h version of the macro to check for the transparent_union attribute. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20094