summaryrefslogtreecommitdiff
path: root/gcc/cp
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 /gcc/cp
parentf6efea5163e7a321ecda80386ac23488e041ec2b (diff)
downloadgcc-4bbc35f33fe5fa9316a7bd18310302eb7616f158.tar.gz
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 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/mangle.c6
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 86669ae1371..a42454a478a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2017-01-18 Markus Trippelsdorf <markus@trippelsdorf.de>
+ PR c++/70182
+ * mangle.c (write_template_args): Add "on" for operator names.
+
+2017-01-18 Markus Trippelsdorf <markus@trippelsdorf.de>
+
PR c++/77489
* mangle.c (write_discriminator): Handle discriminator >= 10.
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 67ec5c31f17..d1b107cbb1d 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -2817,6 +2817,12 @@ write_template_args (tree args)
static void
write_member_name (tree member)
{
+ if (abi_version_at_least (11) && IDENTIFIER_OPNAME_P (member))
+ {
+ write_string ("on");
+ if (abi_warn_or_compat_version_crosses (11))
+ G.need_abi_warning = 1;
+ }
if (identifier_p (member))
write_unqualified_id (member);
else if (DECL_P (member))