From: Nathan Sidwell Date: Thu, 16 Jun 2005 08:21:00 +0000 (+0000) Subject: rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might change. X-Git-Tag: misc/cutover-cvs2svn~2380 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fe93f42f5e6cf7503f722f66e825fd5367153cdf;p=thirdparty%2Fgcc.git rtti.c (get_tinfo_decl): Avoid caching tinfo_descs when it might change. 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 996664a19c1d..af04741fc44c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-06-16 Nathan Sidwell + + * 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 * typeck.c (build_binary_op): Same. diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c index 317068e5c6e7..c9f3d38f6c86 100644 --- a/gcc/cp/rtti.c +++ b/gcc/cp/rtti.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index adcfe2dd5adc..34f4fe50d370 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-06-16 Nathan Sidwell + + * g++.dg/rtti/crash2.C: New. + 2005-06-15 Joseph S. Myers * 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 index 000000000000..9646dfdc1c97 --- /dev/null +++ b/gcc/testsuite/g++.dg/rtti/crash2.C @@ -0,0 +1,9 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 16 Jun 2005 + +// Crash when compiler is optimized +// Origin: Andrew Pinski pinskia@gcc.gnu.org + +struct facet { virtual ~facet(); }; +struct ctype_base {}; +struct ctype : facet, ctype_base {};