public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
From: Andrew Haley <aph@redhat.com>
To: Jason Merrill <jason@redhat.com>
Cc: gcc@gcc.gnu.org, Jakub Jelinek <jakub@redhat.com>
Subject: On alignment
Date: Fri, 21 Mar 2003 11:49:00 -0000	[thread overview]
Message-ID: <15994.60290.676217.25116@cuddles.cambridge.redhat.com> (raw)
In-Reply-To: <wvlu1dxr4gx.fsf@prospero.boston.redhat.com>

Jason Merrill writes:
 > Andrew Haley recently pointed me at an alignment bug:
 > 
 >   http://gcc.gnu.org/ml/gcc/2003-03/msg01196.html
 > 
 > Here, the presence of an aligned attribute is giving the field alignment of
 > 8, even though only 4 was requested.  This worked in 2.95, but has been
 > broken in all 3.x releases (i.e. since Jakub's *_USER_ALIGN changes).
 > 
 > This happens because DECL_USER_ALIGN overrides
 > BIGGEST_FIELD_ALIGNMENT.  The right way to handle this is to clear
 > DECL_USER_ALIGN when rounding up DECL_ALIGN to TYPE_ALIGN; the code
 > in layout_decl gets this right, but check_field_decl in the C++
 > frontend and finish_struct in the C frontend get it wrong.
 > 
 > Do people think this bug is worth fixing?  The behavior is rather
 > surprising, but changing it might break binary compatibility for
 > affected code--of which there's not likely to be very much, but
 > there could be some.  Code which really wants, say, aligment of 4
 > for long long could say __attribute__ ((packed, aligned (4))).  On
 > the other hand, the change would restore binary compatibility with
 > 2.95 for C code.

__attribute__ ((packed, aligned (4))) doesn't work for me. 

I need to be able to supply an alignment that will increase the
alignment of an object if and only if the supplied alignment is
greater than the natural alignment of that object.  

The problem is that gcjh, which generates C++ compatible header files,
knows nothing about the alignment of fields.  For example, It cannot
spit out aligned (4) because it doesn't know what the alignment of a
field should be.  gcjh can, however, spit out

       jlong __attribute__ ((aligned (alignof (classX)))) foo;

in order to produce a field that is effectively

       jlong __attribute__ ((aligned (MAX(alignof (classX), alignof (jlong))))) foo;

This is what the documentation for aligned() says it should do.

Unless we can achieve layout compatibility between Java and C++ code
we will not be able to ship gcj.

I know of no other way to solve this problem unless gcjh is made
cognizant of the target machine, which IMO would be to burden a simple
application for insufficient reason.  It would also be a lot of work.

If we really need to preserve binary compatibility we could have
another attribute -- one which follows the spec for aligned() -- that
is for gcc internal use only.  gcjh could use that instead of
aligned().

Andrew.

  reply	other threads:[~2003-03-21 10:38 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-21  0:25 Jason Merrill
2003-03-21 11:49 ` Andrew Haley [this message]
2003-03-21 15:18   ` Andrew Haley
2003-03-21 19:31   ` Tom Tromey
2003-03-21 15:39 ` Michael Matz
2003-03-21 15:41   ` Andrew Haley
2003-03-22  0:25     ` Jason Merrill
2003-03-22  9:35       ` Tom Tromey
2003-03-22 10:31       ` Andrew Haley
2003-03-25  2:52         ` Jason Merrill
2003-03-25 10:16           ` Andrew Haley
2003-03-25 16:48 Kevin B. Hendricks
2003-03-25 18:39 ` Jason Merrill
2003-03-25 18:41   ` Jason Merrill
2003-03-25 19:14     ` Kevin B. Hendricks
2003-03-25 19:57       ` Jason Merrill
2003-04-22 11:36         ` Andrew Haley
2003-04-22 12:05           ` Nathan Sidwell
2003-04-22 12:37             ` Andrew Haley
2003-04-22 13:15           ` Andreas Schwab
2003-04-23 13:32             ` Jamie Lokier
2003-04-23 16:07               ` Jason Merrill
2003-04-23 17:41               ` Tom Tromey
2003-04-23 18:06                 ` Jason Merrill
2003-04-23 18:42                   ` Tom Tromey
2003-04-23 19:13                     ` Jason Merrill
2003-04-23 19:43                       ` Gabriel Dos Reis
2003-04-23 20:23                         ` Tom Tromey
2003-04-23 21:45                           ` Gabriel Dos Reis
2003-04-24  7:00                           ` Jason Merrill
2003-04-24 11:45                             ` Andrew Haley
2003-05-01 23:50                               ` Tom Tromey
2003-05-02 13:08                                 ` Gabriel Dos Reis
2003-05-05 14:56                                   ` Jason Merrill
2003-05-08  9:58                                     ` Gabriel Dos Reis
2003-04-23 19:33                     ` Gabriel Dos Reis
2003-04-24  1:32                     ` Jamie Lokier
2003-03-25 21:27       ` Tom Tromey
2003-03-26 12:58         ` Andrew Haley
2003-03-26 22:26           ` Mark Mitchell
2003-03-25 18:57   ` Tom Tromey
2003-04-22 14:43 Robert Dewar
2003-04-22 15:13 ` Andrew Haley
2003-04-22 16:22   ` Jason Merrill
2003-04-22 16:26     ` Nicola Pero
2003-04-22 17:19       ` Andrew Haley
2003-04-22 18:46       ` Jason Merrill
2003-04-22 17:17     ` Andrew Haley
2003-04-22 17:19 Robert Dewar
2003-04-23 19:34 Joern Rennecke
2003-04-23 19:47 Robert Dewar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=15994.60290.676217.25116@cuddles.cambridge.redhat.com \
    --to=aph@redhat.com \
    --cc=gcc@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=jason@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).