aboutsummaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2011-10-10 20:34:20 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2011-10-10 20:34:20 +0000
commitd58818f7ba00ea641030c0c68a427a59fc6253b3 (patch)
tree4a566dbff6b04c89e85d40174e4517b0789d6853 /libiberty
parent06fe026c0c95c93f138aec9c445b42cfc0295107 (diff)
downloadgcc-d58818f7ba00ea641030c0c68a427a59fc6253b3.zip
gcc-d58818f7ba00ea641030c0c68a427a59fc6253b3.tar.gz
gcc-d58818f7ba00ea641030c0c68a427a59fc6253b3.tar.bz2
re PR c++/48665 (type of const member function)
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. From-SVN: r179772
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog7
-rw-r--r--libiberty/cp-demangle.c24
-rw-r--r--libiberty/testsuite/demangle-expected5
3 files changed, 36 insertions, 0 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 59460e4..6859afa 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -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.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index 32318e8..c7afef0 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -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;
}
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index 64ccb92..70abf68 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -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 ()>