On 6/25/06, Eric Botcazou <[EMAIL PROTECTED]> wrote:
> So, something obviously wrong with
>
> struct max_alignment {
> char c;
> union {
> HOST_WIDEST_INT i;
> long double d;
> } u;
> };
>
> /* The biggest alignment required. */
>
> #define MAX_ALIGNMENT (offsetof (struct max_alignment, u))
>
> for SPARC 32bit?
I don't think so, the ABI says 8 in both cases.
Note that bootstrap doesn't fail on SPARC/Solaris 2.[56] and (presumably)
SPARC/Linux, which have HOST_WIDE_INT == 32, whereas SPARC/Solaris 7+ have
HOST_WIDE_INT == 64. All are 32-bit compilers.
Bootstrap doesn't fail on SPARC64/Solaris 7+ either, for which the ABI says 16
for the alignment in both cases. They are 64-bit compilers.
SPARC psABI3.0 (32bit version) defines long double as 8 byte aligned.
SCD4.2, 64bit version, defines long double as 16 byte aligned with some caveat
(which essentially says long double can be 8-byte aligned in some cases
- fortran common block case - but the compiler should assume
16-byte unless it can prove otherwise).
On 32bit ABI, there's also a possiblity of "double"s being only 4-byte aligned
when a double is passed on the stack.
I don't know enough about gcc's gc to know whether the above can trip it over,
but the memory allocation (malloc and the likes) shouldn't be a
problem as long as
it returns 8-byte aligned block on 32bit and 16-byte aligned on 64bit.
--
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com"