aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/tree.c
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2009-05-17 17:09:02 +0100
committerJoseph Myers <jsm28@gcc.gnu.org>2009-05-17 17:09:02 +0100
commit8fa6fa79177806a38422c7c13a29a8fc12e38bf3 (patch)
treeda819afeb90729a922ba304170d19bdb52a8fc0e /gcc/cp/tree.c
parente0a6661b792947c0f09d6bdb3b9ee98723b2993f (diff)
downloadgcc-8fa6fa79177806a38422c7c13a29a8fc12e38bf3.zip
gcc-8fa6fa79177806a38422c7c13a29a8fc12e38bf3.tar.gz
gcc-8fa6fa79177806a38422c7c13a29a8fc12e38bf3.tar.bz2
tree.c (cxx_printable_name_internal): Allow consecutive translated and untranslated cached copies of the name of the...
cp: * tree.c (cxx_printable_name_internal): Allow consecutive translated and untranslated cached copies of the name of the current function. testsuite: * g++.dg/warn/translate-ice-1.C: New test. From-SVN: r147636
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r--gcc/cp/tree.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index 9cc767d..219cb39 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -1264,10 +1264,15 @@ cxx_printable_name_internal (tree decl, int v, bool translate)
if (current_function_decl != NULL_TREE)
{
- if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
- ring_counter += 1;
- if (ring_counter == PRINT_RING_SIZE)
- ring_counter = 0;
+ /* There may be both translated and untranslated versions of the
+ name cached. */
+ for (i = 0; i < 2; i++)
+ {
+ if (uid_ring[ring_counter] == DECL_UID (current_function_decl))
+ ring_counter += 1;
+ if (ring_counter == PRINT_RING_SIZE)
+ ring_counter = 0;
+ }
gcc_assert (uid_ring[ring_counter] != DECL_UID (current_function_decl));
}