This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: Regression for trunk on i686-pc-linux-gnu
- From: Nathan Sidwell <nathan at codesourcery dot com>
- To: Andrew Pinski <pinskia at physics dot uc dot edu>
- Cc: darcypj at us dot ibm dot com, corsepiu at faw dot uni-ulm dot de, austern at apple dot com, kazu at cs dot umass dot edu, edelsohn at gnu dot org, rsandifo at redhat dot com, gcc-regression at gcc dot gnu dot org, autocrasher at devphil dot com, kcook at gcc dot gnu dot org, dnovillo at redhat dot com, zlaski at apple dot com, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 23 Sep 2004 08:01:06 +0100
- Subject: Re: Regression for trunk on i686-pc-linux-gnu
- Organization: Codesourcery LLC
- References: <20040922214457.1063.qmail@fenric.devphil.com> <876C76A0-0CE3-11D9-921D-000A95D692F4@physics.uc.edu>
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);