Commit 9b41f0d3 by Jason Merrill Committed by Jason Merrill

semantics.c (register_constexpr_fundef): Add to hash table here.

	* semantics.c (register_constexpr_fundef): Add to hash table here.
	(validate_constexpr_fundecl): Not here.

From-SVN: r173681
parent efd115c1
2011-05-11 Jason Merrill <jason@redhat.com> 2011-05-11 Jason Merrill <jason@redhat.com>
* semantics.c (register_constexpr_fundef): Add to hash table here.
(validate_constexpr_fundecl): Not here.
* decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once. * decl.c (grokdeclarator): Only set DECL_DECLARED_CONSTEXPR_P once.
* pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p, * pt.c (build_non_dependent_expr): Don't check null_ptr_cst_p,
......
...@@ -5456,9 +5456,6 @@ is_valid_constexpr_fn (tree fun, bool complain) ...@@ -5456,9 +5456,6 @@ is_valid_constexpr_fn (tree fun, bool complain)
tree tree
validate_constexpr_fundecl (tree fun) validate_constexpr_fundecl (tree fun)
{ {
constexpr_fundef entry;
constexpr_fundef **slot;
if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun)) if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
return NULL; return NULL;
else if (DECL_CLONED_FUNCTION_P (fun)) else if (DECL_CLONED_FUNCTION_P (fun))
...@@ -5471,21 +5468,6 @@ validate_constexpr_fundecl (tree fun) ...@@ -5471,21 +5468,6 @@ validate_constexpr_fundecl (tree fun)
return NULL; return NULL;
} }
/* Create the constexpr function table if necessary. */
if (constexpr_fundef_table == NULL)
constexpr_fundef_table = htab_create_ggc (101,
constexpr_fundef_hash,
constexpr_fundef_equal,
ggc_free);
entry.decl = fun;
entry.body = NULL;
slot = (constexpr_fundef **)
htab_find_slot (constexpr_fundef_table, &entry, INSERT);
if (*slot == NULL)
{
*slot = ggc_alloc_constexpr_fundef ();
**slot = entry;
}
return fun; return fun;
} }
...@@ -5722,8 +5704,8 @@ constexpr_fn_retval (tree body) ...@@ -5722,8 +5704,8 @@ constexpr_fn_retval (tree body)
tree tree
register_constexpr_fundef (tree fun, tree body) register_constexpr_fundef (tree fun, tree body)
{ {
constexpr_fundef *fundef = retrieve_constexpr_fundef (fun); constexpr_fundef entry;
gcc_assert (fundef != NULL && fundef->body == NULL); constexpr_fundef **slot;
if (DECL_CONSTRUCTOR_P (fun)) if (DECL_CONSTRUCTOR_P (fun))
body = build_constexpr_constructor_member_initializers body = build_constexpr_constructor_member_initializers
...@@ -5754,7 +5736,22 @@ register_constexpr_fundef (tree fun, tree body) ...@@ -5754,7 +5736,22 @@ register_constexpr_fundef (tree fun, tree body)
require_potential_rvalue_constant_expression (body); require_potential_rvalue_constant_expression (body);
return NULL; return NULL;
} }
fundef->body = body;
/* Create the constexpr function table if necessary. */
if (constexpr_fundef_table == NULL)
constexpr_fundef_table = htab_create_ggc (101,
constexpr_fundef_hash,
constexpr_fundef_equal,
ggc_free);
entry.decl = fun;
entry.body = body;
slot = (constexpr_fundef **)
htab_find_slot (constexpr_fundef_table, &entry, INSERT);
gcc_assert (*slot == NULL);
*slot = ggc_alloc_constexpr_fundef ();
**slot = entry;
return fun; return fun;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment