aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-07-18 20:42:24 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-07-18 20:42:24 +0200
commit7a7f16ca45487c0a414c9a3d06423ab80d0f6a4f (patch)
tree049dc48270bdabefd3aee6960faf743bd7389d8a /gcc
parentf4d902955b3d123937ab85866c51f9b665591604 (diff)
downloadgcc-7a7f16ca45487c0a414c9a3d06423ab80d0f6a4f.zip
gcc-7a7f16ca45487c0a414c9a3d06423ab80d0f6a4f.tar.gz
gcc-7a7f16ca45487c0a414c9a3d06423ab80d0f6a4f.tar.bz2
re PR c++/71826 (ICE on valid C++ code with ambiguous member lookup: tree check: expected baselink, have error_mark in tsubst_baselink, at cp/pt.c:13737)
PR c++/71826 * pt.c (tsubst_baselink): Only set BASELINK_OPTYPE for BASELINK_P. * g++.dg/template/pr71826.C: New test. From-SVN: r238441
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/template/pr71826.C17
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3cd6b13..899b2ae 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2016-07-18 Jakub Jelinek <jakub@redhat.com>
+ PR c++/71826
+ * pt.c (tsubst_baselink): Only set BASELINK_OPTYPE for BASELINK_P.
+
PR c++/71822
* cp-gimplify.c (cp_gimplify_expr) <case VEC_INIT_EXPR>: Recursively
fold *expr_p before genericizing it.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 1fbf546..916fd7b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -13767,7 +13767,8 @@ tsubst_baselink (tree baselink, tree object_type,
BASELINK_FUNCTIONS (baselink),
template_args);
/* Update the conversion operator type. */
- BASELINK_OPTYPE (baselink) = optype;
+ if (BASELINK_P (baselink))
+ BASELINK_OPTYPE (baselink) = optype;
if (!object_type)
object_type = current_class_type;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2f6471a..060fceb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2016-07-18 Jakub Jelinek <jakub@redhat.com>
+ PR c++/71826
+ * g++.dg/template/pr71826.C: New test.
+
PR c++/71822
* g++.dg/template/defarg21.C: New test.
diff --git a/gcc/testsuite/g++.dg/template/pr71826.C b/gcc/testsuite/g++.dg/template/pr71826.C
new file mode 100644
index 0000000..753fd7e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/pr71826.C
@@ -0,0 +1,17 @@
+// PR c++/71826
+// { dg-do compile }
+
+template <class> struct A { int i; }; // { dg-message "note" }
+struct B { void i () {} }; // { dg-message "note" }
+template <class T> struct C : A <T>, B
+{
+ void f () { i (); } // { dg-error "is ambiguous" }
+};
+
+int
+main ()
+{
+ C <int> c;
+ c.f ();
+ return 0;
+}