]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might change.
authorNathan Sidwell <nathan@codesourcery.com>
Thu, 16 Jun 2005 08:21:00 +0000 (08:21 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Thu, 16 Jun 2005 08:21:00 +0000 (08:21 +0000)
cp:
* rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might
change.
(create_pseudo_type_info): First parameter is an int.
testsuite:
* g++.dg/rtti/crash2.C: New.

From-SVN: r101011

gcc/cp/ChangeLog
gcc/cp/rtti.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/rtti/crash2.C [new file with mode: 0644]

index 996664a19c1d774d25ef5978669b2e6746dd4673..af04741fc44ce41d2f802cdb9a7998770f1f3fb3 100644 (file)
@@ -1,3 +1,9 @@
+2005-06-16  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might
+       change.
+       (create_pseudo_type_info): First parameter is an int.
+
 2005-06-15  Aldy Hernandez  <aldyh@redhat.com>
 
        * typeck.c (build_binary_op): Same.
index 317068e5c6e78785cc00d649b3f797ea6fddb031..c9f3d38f6c8676ea96e165d2a94a42695491a929 100644 (file)
@@ -117,7 +117,7 @@ static tree generic_initializer (tinfo_s *, tree);
 static tree ptr_initializer (tinfo_s *, tree);
 static tree ptm_initializer (tinfo_s *, tree);
 static tree class_initializer (tinfo_s *, tree, tree);
-static void create_pseudo_type_info (tinfo_kind, const char *, ...);
+static void create_pseudo_type_info (int, const char *, ...);
 static tree get_pseudo_ti_init (tree, unsigned);
 static unsigned get_pseudo_ti_index (tree);
 static void create_tinfo_types (void);
@@ -369,8 +369,8 @@ get_tinfo_decl (tree type)
   d = IDENTIFIER_GLOBAL_VALUE (name);
   if (!d)
     {
-      tinfo_s *ti = VEC_index (tinfo_s, tinfo_descs,
-                              get_pseudo_ti_index (type));
+      int ix = get_pseudo_ti_index (type);
+      tinfo_s *ti = VEC_index (tinfo_s, tinfo_descs, ix);
 
       d = build_lang_decl (VAR_DECL, name, ti->type);
       SET_DECL_ASSEMBLER_NAME (d, name);
@@ -1100,7 +1100,7 @@ get_pseudo_ti_init (tree type, unsigned tk_index)
    NULL.  */
 
 static void
-create_pseudo_type_info (tinfo_kind tk, const char *real_name, ...)
+create_pseudo_type_info (int tk, const char *real_name, ...)
 {
   tinfo_s *ti;
   tree pseudo_type;
index adcfe2dd5adcd73fbb8e102174e45bc7ad7c3ec9..34f4fe50d3704ea7a9a19f286b36bd91b29c2949 100644 (file)
@@ -1,3 +1,7 @@
+2005-06-16  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * g++.dg/rtti/crash2.C: New.
+
 2005-06-15  Joseph S. Myers  <joseph@codesourcery.com>
 
        * gcc.dg/noncompile/20040203-3.c: Update expected message.
diff --git a/gcc/testsuite/g++.dg/rtti/crash2.C b/gcc/testsuite/g++.dg/rtti/crash2.C
new file mode 100644 (file)
index 0000000..9646dfd
--- /dev/null
@@ -0,0 +1,9 @@
+// Copyright (C) 2005 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 16 Jun 2005 <nathan@codesourcery.com>
+
+// Crash when compiler is optimized
+// Origin:  Andrew Pinski pinskia@gcc.gnu.org
+
+struct facet { virtual ~facet(); };
+struct ctype_base {};
+struct ctype : facet, ctype_base {};