diff options
author | Jason Merrill <jason@redhat.com> | 2016-08-09 10:37:12 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2016-08-09 10:37:12 -0400 |
commit | f4fce1837cb18401b714379b7b18ede89b9d4fe5 (patch) | |
tree | d4fe460d03cc97a614f2d409ef0bc31a0ae16c96 /gcc/cp | |
parent | 810a3aa6bbdc5d2fd058f60683ea5c22c427eddd (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/class.c | 2 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 3 |
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); |