diff options
author | Markus Trippelsdorf <markus@trippelsdorf.de> | 2017-01-18 08:49:11 +0000 |
---|---|---|
committer | Markus Trippelsdorf <trippels@gcc.gnu.org> | 2017-01-18 08:49:11 +0000 |
commit | 4bbc35f33fe5fa9316a7bd18310302eb7616f158 (patch) | |
tree | d4fd72c31d0897c52a3930c438870be3b370022a /gcc/cp | |
parent | f6efea5163e7a321ecda80386ac23488e041ec2b (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 6 |
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)) |