diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 68c8571e440..1563a6d480e 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,12 @@ +2003-11-07 Carlo Wood + + * include/bits/demangle.h + (qualifier_list::decode_qualifiers(string_type&, + string_type&, bool member_function_pointer_qualifiers): + Always seperate the '[' of an array type with a space from + what is left of it, except when that is the closing bracket + of another array dimension. + 2003-11-07 Carlo Wood * include/bits/demangle.h diff --git a/libstdc++-v3/include/bits/demangle.h b/libstdc++-v3/include/bits/demangle.h index 901eaa7e1b8..28581662db1 100644 --- a/libstdc++-v3/include/bits/demangle.h +++ b/libstdc++-v3/include/bits/demangle.h @@ -1380,7 +1380,7 @@ namespace __gnu_cxx // [K|V|r]+ ==> [ const| volatile| restrict]+Q "KVr..." // U ==> SQ "U..." // M ==> C::*Q "M..." ( recurs.) - // A ==> [I] "A..." ( recurs.) + // A ==> [I] "A..." ( recurs.) // A ==> (Q) [I] "A..." ( recurs.) // Note that when ends on an A then the brackets are omitted: // AA ==> [I2][I] @@ -1454,14 +1454,15 @@ namespace __gnu_cxx case 'A': { string_type index = (*iter).get_optional_type(); - if (++iter != M_qualifier_starts.rend() - && (*iter).first_qualifier() != 'A') + if (++iter == M_qualifier_starts.rend()) + postfix = " [" + index + "]" + postfix; + else if ((*iter).first_qualifier() == 'A') + postfix = "[" + index + "]" + postfix; + else { prefix += " ("; postfix = ") [" + index + "]" + postfix; } - else - postfix = "[" + index + "]" + postfix; break; } case 'M': diff --git a/libstdc++-v3/testsuite/demangle/abi_examples/10.cc b/libstdc++-v3/testsuite/demangle/abi_examples/10.cc index fc422a7cd04..d639ca826b9 100644 --- a/libstdc++-v3/testsuite/demangle/abi_examples/10.cc +++ b/libstdc++-v3/testsuite/demangle/abi_examples/10.cc @@ -34,7 +34,7 @@ int main() { static int bar; }; int Foo::bar; */ - verify_demangle("_ZN3FooIA4_iE3barE", "Foo::bar"); + verify_demangle("_ZN3FooIA4_iE3barE", "Foo::bar"); return 0; } diff --git a/libstdc++-v3/testsuite/demangle/regression/3111-2.cc b/libstdc++-v3/testsuite/demangle/regression/3111-2.cc index 8897c5069a1..42d50f4c1aa 100644 --- a/libstdc++-v3/testsuite/demangle/regression/3111-2.cc +++ b/libstdc++-v3/testsuite/demangle/regression/3111-2.cc @@ -32,7 +32,7 @@ int main() // verify_demangle("_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i", // "f(int[sizeof(N::A::f() const::foo())])"); verify_demangle("_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i", - "f(int[sizeof(N::A::f() const::foo)])"); + "f(int [sizeof(N::A::f() const::foo)])"); return 0; } diff --git a/libstdc++-v3/testsuite/demangle/regression/7986-01.cc b/libstdc++-v3/testsuite/demangle/regression/7986-01.cc index e864957db39..46551e77fc7 100644 --- a/libstdc++-v3/testsuite/demangle/regression/7986-01.cc +++ b/libstdc++-v3/testsuite/demangle/regression/7986-01.cc @@ -27,7 +27,7 @@ int main() { using namespace __gnu_test; // cplus-dem FAIL - verify_demangle("_Z1fA37_iPS_", "f(int[37], int (*) [37])"); + verify_demangle("_Z1fA37_iPS_", "f(int [37], int (*) [37])"); return 0; } diff --git a/libstdc++-v3/testsuite/demangle/regression/7986-07.cc b/libstdc++-v3/testsuite/demangle/regression/7986-07.cc index 6a4dfb05024..e0352567b00 100644 --- a/libstdc++-v3/testsuite/demangle/regression/7986-07.cc +++ b/libstdc++-v3/testsuite/demangle/regression/7986-07.cc @@ -28,7 +28,7 @@ int main() using namespace __gnu_test; // cplus-dem FAIL - verify_demangle("_Z3fooA30_A_i", "foo(int[30][])"); + verify_demangle("_Z3fooA30_A_i", "foo(int [30][])"); return 0;