aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2019-02-20 13:59:18 -0500
committerJason Merrill <jason@gcc.gnu.org>2019-02-20 13:59:18 -0500
commit60067b876326baff092554e5fb52e963a402e91b (patch)
tree2e39ac9ca78c434369f524c4904f7ba923b3ceed
parente3fe9cfb2fe9393791c1a586fd537ffd9cbe9824 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/mangle.c3
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype-tid1.C9
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> ();
+}