This is the mail archive of the gcc-patches@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]
Other format: [Raw text]

PR 21022: ICE while compiling GdkFontMetrics.class with stabs debugging


It's a bug in dbxout.  A field is marked as DECL_IGNORED_P, but
dbxout_type_fields() still tries to access it.

Andrew.


2005-04-19  Andrew Haley  <aph@redhat.com>

	PR java/21022
	* dbxout.c (dbxout_type_fields): Check DECL_IGNORED_P before
	looking at a field's bitpos.


Index: dbxout.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/dbxout.c,v
retrieving revision 1.227
diff -c -6 -p -r1.227 dbxout.c
*** dbxout.c	12 Apr 2005 20:39:04 -0000	1.227
--- dbxout.c	19 Apr 2005 13:17:51 -0000
*************** dbxout_type_fields (tree type)
*** 1401,1420 ****
  	 return early.  */
        if (tem == error_mark_node || TREE_TYPE (tem) == error_mark_node)
  	return;
  
        /* Omit here local type decls until we know how to support them.  */
        if (TREE_CODE (tem) == TYPE_DECL
  	  /* Omit fields whose position or size are variable or too large to
  	     represent.  */
  	  || (TREE_CODE (tem) == FIELD_DECL
  	      && (! host_integerp (bit_position (tem), 0)
  		  || ! DECL_SIZE (tem)
! 		  || ! host_integerp (DECL_SIZE (tem), 1)))
! 	  /* Omit here the nameless fields that are used to skip bits.  */
! 	   || DECL_IGNORED_P (tem))
  	continue;
  
        else if (TREE_CODE (tem) != CONST_DECL)
  	{
  	  /* Continue the line if necessary,
  	     but not before the first field.  */
--- 1401,1420 ----
  	 return early.  */
        if (tem == error_mark_node || TREE_TYPE (tem) == error_mark_node)
  	return;
  
        /* Omit here local type decls until we know how to support them.  */
        if (TREE_CODE (tem) == TYPE_DECL
+ 	  /* Omit here the nameless fields that are used to skip bits.  */
+ 	  || DECL_IGNORED_P (tem)
  	  /* Omit fields whose position or size are variable or too large to
  	     represent.  */
  	  || (TREE_CODE (tem) == FIELD_DECL
  	      && (! host_integerp (bit_position (tem), 0)
  		  || ! DECL_SIZE (tem)
! 		  || ! host_integerp (DECL_SIZE (tem), 1))))
  	continue;
  
        else if (TREE_CODE (tem) != CONST_DECL)
  	{
  	  /* Continue the line if necessary,
  	     but not before the first field.  */


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