aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-06-17 12:35:33 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-06-17 12:35:33 -0400
commit92354dc7a9e87708bad1aac491292f5e41692a2e (patch)
treeaccb1eb9dec966da5642d859bc493b3138ff6ad5 /gcc
parent4e53aa978d9b1363ae67e68a0d59f6ced94b3c6d (diff)
downloadgcc-92354dc7a9e87708bad1aac491292f5e41692a2e.zip
gcc-92354dc7a9e87708bad1aac491292f5e41692a2e.tar.gz
gcc-92354dc7a9e87708bad1aac491292f5e41692a2e.tar.bz2
PR c++/71209 - wrong error with dependent base
* typeck.c (finish_class_member_access_expr): Avoid "not a base" warning when there are dependent bases. From-SVN: r237558
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/testsuite/g++.dg/template/dependent-base1.C10
3 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8841e15..6b5258e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2016-06-17 Jason Merrill <jason@redhat.com>
+
+ PR c++/71209
+ * typeck.c (finish_class_member_access_expr): Avoid "not a base"
+ warning when there are dependent bases.
+
2016-06-17 Jakub Jelinek <jakub@redhat.com>
* semantics.c (handle_omp_array_sections_1): Don't ICE when
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 2ccd2da..3704b88 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -2797,6 +2797,8 @@ finish_class_member_access_expr (cp_expr object, tree name, bool template_p,
return error_mark_node;
if (!access_path)
{
+ if (any_dependent_bases_p (object_type))
+ goto dependent;
if (complain & tf_error)
error ("%qT is not a base of %qT", scope, object_type);
return error_mark_node;
diff --git a/gcc/testsuite/g++.dg/template/dependent-base1.C b/gcc/testsuite/g++.dg/template/dependent-base1.C
new file mode 100644
index 0000000..392305b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/dependent-base1.C
@@ -0,0 +1,10 @@
+// PR c++/71209
+
+struct A {
+ int table_clear;
+};
+
+template <typename T>
+struct B : T {
+ B() { this->A::table_clear; }
+};