aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2016-08-09 10:37:12 -0400
committerJason Merrill <jason@gcc.gnu.org>2016-08-09 10:37:12 -0400
commitf4fce1837cb18401b714379b7b18ede89b9d4fe5 (patch)
treed4fe460d03cc97a614f2d409ef0bc31a0ae16c96 /gcc/cp
parent810a3aa6bbdc5d2fd058f60683ea5c22c427eddd (diff)
downloadgcc-f4fce1837cb18401b714379b7b18ede89b9d4fe5.zip
gcc-f4fce1837cb18401b714379b7b18ede89b9d4fe5.tar.gz
gcc-f4fce1837cb18401b714379b7b18ede89b9d4fe5.tar.bz2
PR c++/72849 - ICE with incomplete class.
* constexpr.c (cxx_eval_constant_expression): Check COMPLETE_TYPE_P before calling is_really_empty_class. * class.c (is_really_empty_class): Don't call complete_type. From-SVN: r239289
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/class.c2
-rw-r--r--gcc/cp/constexpr.c3
3 files changed, 8 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7b746ca..ffb0b85 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2016-08-09 Jason Merrill <jason@redhat.com>
+ PR c++/72849
+ * constexpr.c (cxx_eval_constant_expression): Check
+ COMPLETE_TYPE_P before calling is_really_empty_class.
+ * class.c (is_really_empty_class): Don't call complete_type.
+
PR c++/56701
* typeck.c (cp_build_addr_expr_1): Remove special *this handling.
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index e7cfabd..8249d93 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -8419,7 +8419,7 @@ is_really_empty_class (tree type)
/* CLASSTYPE_EMPTY_P isn't set properly until the class is actually laid
out, but we'd like to be able to check this before then. */
- if (COMPLETE_TYPE_P (complete_type (type)) && is_empty_class (type))
+ if (COMPLETE_TYPE_P (type) && is_empty_class (type))
return true;
for (binfo = TYPE_BINFO (type), i = 0;
diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c
index a65b817..20c870e 100644
--- a/gcc/cp/constexpr.c
+++ b/gcc/cp/constexpr.c
@@ -3699,7 +3699,8 @@ cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
CONST_DECL for aggregate constants. */
if (lval)
return t;
- if (is_really_empty_class (TREE_TYPE (t)))
+ if (COMPLETE_TYPE_P (TREE_TYPE (t))
+ && is_really_empty_class (TREE_TYPE (t)))
{
/* If the class is empty, we aren't actually loading anything. */
r = build_constructor (TREE_TYPE (t), NULL);