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]

Re: Regression for trunk on i686-pc-linux-gnu


Andrew Pinski wrote:

I almost think these libstdc++ regressions are caused by:
+2004-09-22  Nathan Sidwell  <nathan@codesourcery.com>

+    * cp-tree.h (struct lang_type_class): Remove marked flags, add
+    diamond_shaped and repeated_base flags.  Reorder to keep 8-bit blocks.
+    (TYPE_MARKED_P): New.
+    (CLASSTYPE_DIAMOND_SHAPED_P, CLASSTYPE_REPEATED_BASE_P): New.
+    (CLASSTYPE_MARKED_N, SET_CLASSTYPE_MARKED_N,
+    CLEAR_CLASSTYPE_MARKED_N): Remove.
+    (CLASSTYPE_MARKED_*, SET_CLASSTYPE_MARKED_*,
+    CLEAR_CLASSTYPE_MARKED_*): Remove.
+    * decl.c (xref_basetypes): Use TYPE_MARKED_P. Determine diamond
+    shaped and repeated base properties.
+    * lex.c (cxx_make_type): Don't clear TYPE_ALIAS_SET.
+    * rtti.c (dfs_class_hint_mark, dfs_class_hint_unmark,
+    class_hint_flags): Remove.
+    (get_pseudo_ti_init): Use CLASSTYPE_REPEATED_BASE_P and
+    CLASSTYPE_DIAMOND_SHAPED_P.

yes. I am testing the attached patch, which I'll commit after testing. It's fairly high on my obvious scale, so please use it now, if you're wedged.

nathan

--
Nathan Sidwell    ::   http://www.codesourcery.com   ::     CodeSourcery LLC
nathan@codesourcery.com    ::     http://www.planetfall.pwp.blueyonder.co.uk

Index: cp/decl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/cp/decl.c,v
retrieving revision 1.1302
diff -c -3 -p -r1.1302 decl.c
*** cp/decl.c	22 Sep 2004 10:55:20 -0000	1.1302
--- cp/decl.c	23 Sep 2004 06:59:12 -0000
*************** xref_basetypes (tree ref, tree base_list
*** 9286,9301 ****
  	  continue;
  	}
  
-       if (TYPE_MARKED_P (basetype))
- 	{
- 	  if (basetype == ref)
- 	    error ("recursive type `%T' undefined", basetype);
- 	  else
- 	    error ("duplicate base type `%T' invalid", basetype);
- 	  continue;
- 	}
-       TYPE_MARKED_P (basetype) = 1;
- 
        if (TYPE_FOR_JAVA (basetype) && (current_lang_depth () == 0))
  	TYPE_FOR_JAVA (ref) = 1;
  
--- 9286,9291 ----
*************** xref_basetypes (tree ref, tree base_list
*** 9318,9323 ****
--- 9308,9325 ----
  	  CLASSTYPE_REPEATED_BASE_P (ref)
  	    |= CLASSTYPE_REPEATED_BASE_P (basetype);
  	}
+       
+       /* We must do this test after we've seen through a typedef
+ 	 type.  */
+       if (TYPE_MARKED_P (basetype))
+ 	{
+ 	  if (basetype == ref)
+ 	    error ("recursive type `%T' undefined", basetype);
+ 	  else
+ 	    error ("duplicate base type `%T' invalid", basetype);
+ 	  continue;
+ 	}
+       TYPE_MARKED_P (basetype) = 1;
  
        base_binfo = copy_binfo (base_binfo, basetype, ref,
  			       &igo_prev, via_virtual);

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