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 /libiberty | |
parent | f6efea5163e7a321ecda80386ac23488e041ec2b (diff) | |
download | gcc-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/ChangeLog | 7 | ||||
-rw-r--r-- | libiberty/cp-demangle.c | 2 | ||||
-rw-r--r-- | libiberty/testsuite/demangle-expected | 7 |
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+>) |