aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-12-20 10:38:44 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-12-20 10:38:44 +0000
commitf0bc5f840f8866ac73e1c5cc257f6695165c4405 (patch)
tree01f04a02b58238e496fa171fa68d02bacf303bf6 /gcc
parent336e404f9f34492e5304ba3de2d618d0cc90c8fa (diff)
downloadgcc-f0bc5f840f8866ac73e1c5cc257f6695165c4405.zip
gcc-f0bc5f840f8866ac73e1c5cc257f6695165c4405.tar.gz
gcc-f0bc5f840f8866ac73e1c5cc257f6695165c4405.tar.bz2
re PR c++/51612 ([c++0x] [4.6/4.7 Regression] ICE with constexpr constructor and virtual base class)
/cp 2011-12-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51612 * semantics.c (is_valid_constexpr_fn): In case of constexpr constructors also check for virtual base classes. /testsuite 2011-12-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51612 * g++.dg/cpp0x/constexpr-ice4.C: New. From-SVN: r182526
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C9
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8626e00..6fbd652 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-12-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51612
+ * semantics.c (is_valid_constexpr_fn): In case of constexpr
+ constructors also check for virtual base classes.
+
2011-12-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51328
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index ec56ab5..0cb7ae8 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5730,6 +5730,12 @@ is_valid_constexpr_fn (tree fun, bool complain)
}
}
}
+ else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
+ {
+ ret = false;
+ if (complain)
+ error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
+ }
return ret;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e520613..f6eb1d1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-12-20 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/51612
+ * g++.dg/cpp0x/constexpr-ice4.C: New.
+
2011-12-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51328
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
new file mode 100644
index 0000000..e1ee36d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C
@@ -0,0 +1,9 @@
+// PR c++/51612
+// { dg-options -std=c++0x }
+
+struct A {};
+
+struct B : virtual A
+{
+ constexpr B() { } // { dg-error "has virtual base classes" }
+};