aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2014-02-03 18:22:46 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2014-02-03 18:22:46 +0000
commitf344f525193bd4e271ea50c5eb7a4e92c57dbc67 (patch)
treeef34bcaa01238eb23ee38cda1888df3188a6be29
parentcf5b2be2a4b13c3fb806033840581cd02080375c (diff)
downloadgcc-f344f525193bd4e271ea50c5eb7a4e92c57dbc67.zip
gcc-f344f525193bd4e271ea50c5eb7a4e92c57dbc67.tar.gz
gcc-f344f525193bd4e271ea50c5eb7a4e92c57dbc67.tar.bz2
re PR c++/58871 ([c++11] ICE with defaulted copy constructor in broken template class hierarchy)
/cp 2014-02-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58871 * method.c (synthesized_method_walk): If vbases is non-null but is_empty is true, likewise don't worry about the virtual bases. /testsuite 2014-02-03 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58871 * g++.dg/cpp0x/pr58871.C: New. From-SVN: r207434
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/method.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr58871.C12
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 2e09c88..e73246a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58871
+ * method.c (synthesized_method_walk): If vbases is non-null but
+ is_empty is true, likewise don't worry about the virtual bases.
+
2014-02-01 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51219
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index a1a1051..b1fa943 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -1366,7 +1366,7 @@ synthesized_method_walk (tree ctype, special_function_kind sfk, bool const_p,
}
vbases = CLASSTYPE_VBASECLASSES (ctype);
- if (vbases == NULL)
+ if (vec_safe_is_empty (vbases))
/* No virtual bases to worry about. */;
else if (!assign_p)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d896017..8c7af49 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-02-03 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/58871
+ * g++.dg/cpp0x/pr58871.C: New.
+
2014-02-03 Cong Hou <congh@google.com>
PR tree-optimization/60000
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58871.C b/gcc/testsuite/g++.dg/cpp0x/pr58871.C
new file mode 100644
index 0000000..5920f5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/pr58871.C
@@ -0,0 +1,12 @@
+// PR c++/59111
+// { dg-do compile { target c++11 } }
+
+template<typename T> struct A : virtual T // { dg-error "base type" }
+{
+ A();
+ A(const A&);
+};
+
+template<typename T> A<T>::A(const A<T>&) = default;
+
+A<int> a = A<int>();