This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: g++ 3.1 EH broken for irix6.5


"Billinghurst, David (CRTS)" <David.Billinghurst@riotinto.com> writes:

> I have just noticed around 100 failures in g++ testsuite with 3.1 on irix
> 6.5.  They are runtime failures consistent with broken exception handling
> (see todays results on gcc-testresults for details).
> 
> Looking back, I see that test results for:
> *	20010529 is OK
> *	20010611 have these same failures.

Can you check whether the code generated for this part of
read_encoded_value_with_base is valid for an unaligned u->ptr?

    case DW_EH_PE_absptr:
      result = (_Unwind_Ptr) u->ptr;
      p += sizeof (void *);
      break;

I'm seeing that the unaligned union isn't being treated as unaligned
anymore.  The patch below seemed to be the one that changed things.

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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]