diff options
author | Jason Merrill <jason@redhat.com> | 2019-02-20 13:59:18 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-02-20 13:59:18 -0500 |
commit | 60067b876326baff092554e5fb52e963a402e91b (patch) | |
tree | 2e39ac9ca78c434369f524c4904f7ba923b3ceed | |
parent | e3fe9cfb2fe9393791c1a586fd537ffd9cbe9824 (diff) | |
download | gcc-60067b876326baff092554e5fb52e963a402e91b.zip gcc-60067b876326baff092554e5fb52e963a402e91b.tar.gz gcc-60067b876326baff092554e5fb52e963a402e91b.tar.bz2 |
PR c++/87513 - 'sorry' mangling PMF template-id.
Here build_offset_ref calls build_qualified_name to make a SCOPE_REF because
the dependent template arguments make type_dependent_expression_p (member)
true. We could probably work hard to prevent this, but it doesn't seem
necessary, and it's easy to fix write_expression to handle the result.
* mangle.c (write_expression): Handle SCOPE_REF to BASELINK.
From-SVN: r269048
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/mangle.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/decltype-tid1.C | 9 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 02e0845..dc0d4a2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2019-02-19 Jason Merrill <jason@redhat.com> + PR c++/87513 - 'sorry' mangling PMF template-id. + * mangle.c (write_expression): Handle SCOPE_REF to BASELINK. + +2019-02-19 Jason Merrill <jason@redhat.com> + PR c++/88380 - wrong-code with flexible array and NSDMI. * typeck2.c (process_init_constructor_record): Skip flexarrays. diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index f550b75..777c477 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -3003,7 +3003,8 @@ write_expression (tree expr) { scope = TREE_OPERAND (expr, 0); member = TREE_OPERAND (expr, 1); - gcc_assert (!BASELINK_P (member)); + if (BASELINK_P (member)) + member = BASELINK_FUNCTIONS (member); } else { diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype-tid1.C b/gcc/testsuite/g++.dg/cpp0x/decltype-tid1.C new file mode 100644 index 0000000..0328502 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/decltype-tid1.C @@ -0,0 +1,9 @@ +// PR c++/87513 +// { dg-do compile { target c++11 } } + +struct A { template <long> void foo (); }; +template <long t> auto bar () -> decltype (&A::foo<t>); +void foo () +{ + bar<0> (); +} |