aboutsummaryrefslogtreecommitdiff
path: root/libiberty
diff options
context:
space:
mode:
authorMarkus Trippelsdorf <markus@trippelsdorf.de>2017-01-18 08:49:11 +0000
committerMarkus Trippelsdorf <trippels@gcc.gnu.org>2017-01-18 08:49:11 +0000
commit4bbc35f33fe5fa9316a7bd18310302eb7616f158 (patch)
treed4fd72c31d0897c52a3930c438870be3b370022a /libiberty
parentf6efea5163e7a321ecda80386ac23488e041ec2b (diff)
downloadgcc-4bbc35f33fe5fa9316a7bd18310302eb7616f158.zip
gcc-4bbc35f33fe5fa9316a7bd18310302eb7616f158.tar.gz
gcc-4bbc35f33fe5fa9316a7bd18310302eb7616f158.tar.bz2
Fix PR70182 -- missing "on" in mangling of unresolved operators
The ABI says: <unresolved-name> ::= [gs] <base-unresolved-name> ::= sr <unresolved-type> <base-unresolved-name> ::= srN <unresolved-type> <unresolved-qualifier-level>+ E <base-unresolved-name> ::= [gs] sr <unresolved-qualifier-level>+ E <base-unresolved-name> <base-unresolved-name> ::= <simple-id> ::= on <operator-name> ::= on <operator-name> <template-args> ::= dn <destructor-name libiberty: PR c++/70182 * cp-demangle.c (d_unqualified_name): Handle "on" for operator names. * testsuite/demangle-expected: Add tests. gcc/cp: PR c++/70182 * mangle.c (write_template_args): Add "on" for operator names. gcc: PR c++/70182 * doc/invoke.texi (fabi-version): Mention mangling fix for operator names. From-SVN: r244567
Diffstat (limited to 'libiberty')
-rw-r--r--libiberty/ChangeLog7
-rw-r--r--libiberty/cp-demangle.c2
-rw-r--r--libiberty/testsuite/demangle-expected7
3 files changed, 16 insertions, 0 deletions
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 104907c..0c5972a 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,5 +1,12 @@
2017-01-18 Markus Trippelsdorf <markus@trippelsdorf.de>
+ PR PR c++/70182
+ * cp-demangle.c (d_unqualified_name): Handle "on" for
+ operator names.
+ * testsuite/demangle-expected: Add tests.
+
+2017-01-18 Markus Trippelsdorf <markus@trippelsdorf.de>
+
PR c++/77489
* cp-demangle.c (d_discriminator): Handle discriminator >= 10.
* testsuite/demangle-expected: Add tests for discriminator.
diff --git a/libiberty/cp-demangle.c b/libiberty/cp-demangle.c
index d84929e..f0dbf93 100644
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -1594,6 +1594,8 @@ d_unqualified_name (struct d_info *di)
ret = d_source_name (di);
else if (IS_LOWER (peek))
{
+ if (peek == 'o' && d_peek_next_char (di) == 'n')
+ d_advance (di, 2);
ret = d_operator_name (di);
if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
{
diff --git a/libiberty/testsuite/demangle-expected b/libiberty/testsuite/demangle-expected
index 07e258f..c1cfa15 100644
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -4682,3 +4682,10 @@ _ZZ3foovE8localVar__9_
_ZZ3foovE8localVar__12
_ZZ3foovE8localVar__12
+
+# PR 70182
+_Z1gI1AEv1SIXadsrT_onplEE
+void g<A>(S<&A::operator+>)
+
+_Z1gI1AEv1SIXadsrT_plEE
+void g<A>(S<&A::operator+>)