This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
RE: g++ 3.1 EH broken for irix6.5
- To: "'Richard Sandiford'" <r dot sandiford at redhat dot com>, "'kenner at vlsi1 dot ultra dot nyu dot edu'" <kenner at vlsi1 dot ultra dot nyu dot edu>
- Subject: RE: g++ 3.1 EH broken for irix6.5
- From: "Billinghurst, David (CRTS)" <David dot Billinghurst at riotinto dot com>
- Date: Thu, 28 Jun 2001 13:55:17 +0100
- Cc: "'gcc-bugs at gcc dot gnu dot org'" <gcc-bugs at gcc dot gnu dot org>
You are right. Backing out that patch gets EH working again.
> -- Patch reproduced...
>
> Sat Jun 2 06:53:50 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
>
> * tree.h (struct record_layout_info_s): New field unpadded_align.
> (set_lang_adjust_rli): New declaration.
> * stor-layout.c (layout_decl): If DECL is packed, but at alignment
> it would have if not packed, do not downgrade DECL_ALIGN.
> (lang_adjust_rli, set_lang_adjust_rli): New.
> (start_record_layout): Initialize new field unpadded_align.
> (debug_rli): Display it.
> (place_union_field, place_field): Set it.
> (layout_type, case RECORD_TYPE): Call via lang_adjust_rli if set.
>
> * print-tree.c (print_node): Don't print "regdecl" when bit doesn't
> mean that; use proper names instead.
> Print DECL_NO_STATIC_CHAIN.
>
> * except.c (expand_builtin_frob_return_addr): Add missing call
> to convert_memory_address #ifdef POINTERS_EXTEND_UNSIGNED.
> (expand_builtin_eh_return): Likewise.
> (expand_eh_return): Clean up ptr_mode != Pmode cases.
>
> Index: stor-layout.c
> ===================================================================
> RCS file: /cvs/gcc/gcc/gcc/stor-layout.c,v
> retrieving revision 1.97
> retrieving revision 1.98
> diff -c -p -d -r1.97 -r1.98
> *** stor-layout.c 2001/05/02 14:31:45 1.97
> --- stor-layout.c 2001/06/02 11:14:06 1.98
> *************** layout_decl (decl, known_align)
> *** 381,387 ****
> DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
> if (maximum_field_alignment != 0)
> DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl),
> maximum_field_alignment);
> ! else if (DECL_PACKED (decl))
> {
> DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
> DECL_USER_ALIGN (decl) = 0;
> --- 381,387 ----
> DECL_BIT_FIELD_TYPE (decl) = DECL_BIT_FIELD (decl) ? type : 0;
> if (maximum_field_alignment != 0)
> DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl),
> maximum_field_alignment);
> ! else if (DECL_PACKED (decl) && known_align % DECL_ALIGN (decl) !=
> 0)
> {
> DECL_ALIGN (decl) = MIN (DECL_ALIGN (decl), BITS_PER_UNIT);
> DECL_USER_ALIGN (decl) = 0;