From: DJ Delorie Date: Tue, 19 Feb 2002 21:01:40 +0000 (+0000) Subject: merge from gcc X-Git-Tag: gdb_5_2-2002-03-03-branchpoint~172 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=59ea9fe7b61c424fc1e45039a6c3a9af0966965b;p=external%2Fbinutils.git merge from gcc --- diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog index f3ef429..9c0fe09 100644 --- a/libiberty/ChangeLog +++ b/libiberty/ChangeLog @@ -1,3 +1,11 @@ +2002-02-19 Scott Snyder + + * 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 PR c++/5390 diff --git a/libiberty/cplus-dem.c b/libiberty/cplus-dem.c index 710b69d..203e30d 100644 --- a/libiberty/cplus-dem.c +++ b/libiberty/cplus-dem.c @@ -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, ","); diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected index 3e90d9f..81b061d 100644 --- a/libiberty/testsuite/demangle-expected +++ b/libiberty/testsuite/demangle-expected @@ -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)