aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-05-12 13:33:53 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-05-12 13:33:53 -0400
commit16c20b0a551b3f6dede9db64afd46f8ea10e87d6 (patch)
treeb475e170f405b3a910fa829f9f4b2a0e447a9c65 /gcc/cp/semantics.c
parent7bf9a5ac1c5310efed24c42eab522e4e9ade1933 (diff)
downloadgcc-16c20b0a551b3f6dede9db64afd46f8ea10e87d6.zip
gcc-16c20b0a551b3f6dede9db64afd46f8ea10e87d6.tar.gz
gcc-16c20b0a551b3f6dede9db64afd46f8ea10e87d6.tar.bz2
cp-tree.h (DECL_DEFERRED_CONSTEXPR_CHECK): New.
* cp-tree.h (DECL_DEFERRED_CONSTEXPR_CHECK): New. * semantics.c (validate_constexpr_fundecl): Set it. (check_deferred_constexpr_decls): Clear it. (register_constexpr_fundef): Make sure it isn't set. * decl.c (grok_special_member_properties): Check it. From-SVN: r173707
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index ffabad1..f1f3121 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5483,7 +5483,10 @@ check_deferred_constexpr_decls (void)
deferred_constexpr_decls = NULL;
FOR_EACH_VEC_ELT (tree, vec, i, fn)
- validate_constexpr_fundecl (fn);
+ {
+ DECL_DEFERRED_CONSTEXPR_CHECK (fn) = false;
+ validate_constexpr_fundecl (fn);
+ }
if (deferred_constexpr_decls == NULL)
{
@@ -5516,6 +5519,7 @@ validate_constexpr_fundecl (tree fun)
/*defer_ok=*/true);
if (valid < 0)
{
+ DECL_DEFERRED_CONSTEXPR_CHECK (fun) = true;
VEC_safe_push (tree, gc, deferred_constexpr_decls, fun);
return NULL;
}
@@ -5764,6 +5768,9 @@ register_constexpr_fundef (tree fun, tree body)
constexpr_fundef entry;
constexpr_fundef **slot;
+ gcc_assert (DECL_DECLARED_CONSTEXPR_P (fun)
+ && !DECL_DEFERRED_CONSTEXPR_CHECK (fun));
+
if (DECL_CONSTRUCTOR_P (fun))
body = build_constexpr_constructor_member_initializers
(DECL_CONTEXT (fun), body);