OSDN Git Service

merge from gcc
authordj <dj>
Tue, 19 Feb 2002 21:01:36 +0000 (21:01 +0000)
committerdj <dj>
Tue, 19 Feb 2002 21:01:36 +0000 (21:01 +0000)
libiberty/ChangeLog
libiberty/cplus-dem.c
libiberty/testsuite/demangle-expected

index f3ef429..9c0fe09 100644 (file)
@@ -1,3 +1,11 @@
+2002-02-19  Scott Snyder  <snyder@fnal.gov>
+
+       * testsuite/demangle-expected: Add test case for infinite loop in
+       demangler.
+       * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle
+       if do_type() doesn't make any progress --- prevents an infinite
+       loop.
+
 2002-02-18  Carlo Wood  <carlo@gnu.org>
 
        PR c++/5390
index 710b69d..203e30d 100644 (file)
@@ -2414,8 +2414,15 @@ demangle_arm_hp_template (work, mangled, n, declp)
             break;
           default:
             /* Not handling other HP cfront stuff */
-            if (!do_type (work, &args, &arg))
-              goto cfront_template_args_done;
+            {
+              const char* old_args = args;
+              if (!do_type (work, &args, &arg))
+                goto cfront_template_args_done;
+
+              /* Fail if we didn't make any progress: prevent infinite loop. */
+              if (args == old_args)
+                return;
+            }
          }
        string_appends (declp, &arg);
        string_append (declp, ",");
index 3e90d9f..81b061d 100644 (file)
@@ -2594,3 +2594,9 @@ _Utf58_0_1__1_2147483647__2147483648
 --format=gnu-v3
 St9bad_alloc
 std::bad_alloc
+# 
+# This caused an infinite loop.
+# We still don't demangle this correctly, but at least we don't hang.
+--format=auto
+__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
+_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator)