OSDN Git Service

PR c++/48665
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Oct 2011 20:34:20 +0000 (20:34 +0000)
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Oct 2011 20:34:20 +0000 (20:34 +0000)
* cp-demangle.c (d_cv_qualifiers): If qualifiers are applied to a
function type, change them to apply to the "this" parameter.
* testsuite/demangle-expected: Add test case.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@179772 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/cp-demangle.c
libiberty/testsuite/demangle-expected

index 59460e4..6859afa 100644 (file)
@@ -1,3 +1,10 @@
+2011-10-10  Ian Lance Taylor  <iant@google.com>
+
+       PR c++/48665
+       * cp-demangle.c (d_cv_qualifiers): If qualifiers are applied to a
+       function type, change them to apply to the "this" parameter.
+       * testsuite/demangle-expected: Add test case.
+
 2011-09-28  Doug Evans  <dje@google.com>
 
        * timeval-utils.c: New file.
index 32318e8..c7afef0 100644 (file)
@@ -2294,8 +2294,10 @@ static struct demangle_component **
 d_cv_qualifiers (struct d_info *di,
                  struct demangle_component **pret, int member_fn)
 {
+  struct demangle_component **pstart;
   char peek;
 
+  pstart = pret;
   peek = d_peek_char (di);
   while (peek == 'r' || peek == 'V' || peek == 'K')
     {
@@ -2332,6 +2334,28 @@ d_cv_qualifiers (struct d_info *di,
       peek = d_peek_char (di);
     }
 
+  if (!member_fn && peek == 'F')
+    {
+      while (pstart != pret)
+       {
+         switch ((*pstart)->type)
+           {
+           case DEMANGLE_COMPONENT_RESTRICT:
+             (*pstart)->type = DEMANGLE_COMPONENT_RESTRICT_THIS;
+             break;
+           case DEMANGLE_COMPONENT_VOLATILE:
+             (*pstart)->type = DEMANGLE_COMPONENT_VOLATILE_THIS;
+             break;
+           case DEMANGLE_COMPONENT_CONST:
+             (*pstart)->type = DEMANGLE_COMPONENT_CONST_THIS;
+             break;
+           default:
+             break;
+           }
+         pstart = &d_left (*pstart);
+       }
+    }
+
   return pret;
 }
 
index 64ccb92..70abf68 100644 (file)
@@ -4198,3 +4198,8 @@ f1<int>
 _Z3fooi._omp_cpyfn.6
 foo(int) [clone ._omp_cpyfn.6]
 foo
+#
+--format=gnu-v3 --no-params
+_Z1fIKFvvES0_Evv
+void f<void () const, void ()>()
+f<void () const, void ()>