Miscellaneous testsuitsuite failures under hpux 10.20

John David Anglin dave@hiauly1.hia.nrc.ca
Fri Jun 23 14:59:00 GMT 2000


Sorry, I didn't look close enough.  Maybe it will.

> 
> 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)
> 


-- 
J. David Anglin                                  dave.anglin@nrc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6605)


More information about the Gcc-bugs mailing list