This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: Miscellaneous testsuitsuite failures under hpux 10.20
- To: geoffk at cygnus dot com (Geoff Keating)
- Subject: Re: Miscellaneous testsuitsuite failures under hpux 10.20
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- Date: Fri, 23 Jun 2000 17:56:49 -0400 (EDT)
- Cc: gcc-bugs at gcc dot gnu dot org
I don't think it will work. DECL_OFFSET_ALIGN(NODE) has to be assignable.
Possibly, MAX_OFILE_ALIGNMENT also needs to be respected.
Dave
>
>
> "John David Anglin" <dave@hiauly1.hia.nrc.ca> writes:
>
> > What to do?
>
> Try this. Tell me if it works.
>
> --
> - Geoffrey Keating <geoffk@cygnus.com>
>
> 2000-05-13 Geoffrey Keating <geoffk@cygnus.com>
>
> * tree.h (DECL_OFFSET_ALIGN): Make the off_align field of
> the tree structure an exponent rather than an explicit alignment
> so it doesn't overflow.
> (SET_DECL_OFFSET_ALIGN): New macro.
> * stor-layout.c (place_union_field): Use SET_DECL_OFFSET_ALIGN
> rather than DECL_OFFSET_ALIGN.
> (place_field): Likewise.
>
> Index: stor-layout.c
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/stor-layout.c,v
> retrieving revision 1.71
> diff -c -p -r1.71 stor-layout.c
> *** stor-layout.c 2000/05/04 21:15:03 1.71
> --- stor-layout.c 2000/05/13 19:57:55
> *************** place_union_field (rli, field)
> *** 576,582 ****
>
> DECL_FIELD_OFFSET (field) = size_zero_node;
> DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
> ! DECL_OFFSET_ALIGN (field) = BIGGEST_ALIGNMENT;
>
> /* Union must be at least as aligned as any field requires. */
> rli->record_align = MAX (rli->record_align, DECL_ALIGN (field));
> --- 576,582 ----
>
> DECL_FIELD_OFFSET (field) = size_zero_node;
> DECL_FIELD_BIT_OFFSET (field) = bitsize_zero_node;
> ! SET_DECL_OFFSET_ALIGN (field, BIGGEST_ALIGNMENT);
>
> /* Union must be at least as aligned as any field requires. */
> rli->record_align = MAX (rli->record_align, DECL_ALIGN (field));
> *************** place_field (rli, field)
> *** 832,838 ****
> normalize_rli (rli);
> DECL_FIELD_OFFSET (field) = rli->offset;
> DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
> ! DECL_OFFSET_ALIGN (field) = rli->offset_align;
>
> /* If this field ended up more aligned than we thought it would be (we
> approximate this by seeing if its position changed), lay out the field
> --- 832,838 ----
> normalize_rli (rli);
> DECL_FIELD_OFFSET (field) = rli->offset;
> DECL_FIELD_BIT_OFFSET (field) = rli->bitpos;
> ! SET_DECL_OFFSET_ALIGN (field, rli->offset_align);
>
> /* If this field ended up more aligned than we thought it would be (we
> approximate this by seeing if its position changed), lay out the field
> Index: tree.h
> ===================================================================
> RCS file: /cvs/gcc/egcs/gcc/tree.h,v
> retrieving revision 1.168
> diff -c -p -r1.168 tree.h
> *** tree.h 2000/05/04 21:15:04 1.168
> --- tree.h 2000/05/13 19:57:55
> *************** struct tree_type
> *** 1281,1288 ****
> #define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
> /* Holds the alignment required for the datum. */
> #define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
> ! /* For FIELD_DECLs, holds the alignment that DECL_FIELD_OFFSET has. */
> ! #define DECL_OFFSET_ALIGN(NODE) (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
> /* Holds the machine mode corresponding to the declaration of a variable or
> field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
> FIELD_DECL. */
> --- 1281,1295 ----
> #define DECL_SIZE_UNIT(NODE) (DECL_CHECK (NODE)->decl.size_unit)
> /* Holds the alignment required for the datum. */
> #define DECL_ALIGN(NODE) (DECL_CHECK (NODE)->decl.u1.a.align)
> ! /* For FIELD_DECLs, off_align holds the number of low-order bits of
> ! DECL_FIELD_OFFSET which are known to be always zero.
> ! DECL_OFFSET_ALIGN thus returns the alignment that DECL_FIELD_OFFSET
> ! has. */
> ! #define DECL_OFFSET_ALIGN(NODE) \
> ! (1UL << FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align)
> ! /* Specify that DECL_ALIGN(NODE) is a multiple of X. */
> ! #define SET_DECL_OFFSET_ALIGN(NODE, X) \
> ! (FIELD_DECL_CHECK (NODE)->decl.u1.a.off_align = ffs (X) - 1)
> /* Holds the machine mode corresponding to the declaration of a variable or
> field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a
> FIELD_DECL. */
>
--
J. David Anglin dave.anglin@nrc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6605)