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>
* 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.
* 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)
tree
validate_constexpr_fundecl (tree fun)
{
constexpr_fundef entry;
constexpr_fundef **slot;
if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
return NULL;
else if (DECL_CLONED_FUNCTION_P (fun))
......@@ -5471,21 +5468,6 @@ validate_constexpr_fundecl (tree fun)
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;
}
......@@ -5722,8 +5704,8 @@ constexpr_fn_retval (tree body)
tree
register_constexpr_fundef (tree fun, tree body)
{
constexpr_fundef *fundef = retrieve_constexpr_fundef (fun);
gcc_assert (fundef != NULL && fundef->body == NULL);
constexpr_fundef entry;
constexpr_fundef **slot;
if (DECL_CONSTRUCTOR_P (fun))
body = build_constexpr_constructor_member_initializers
......@@ -5754,7 +5736,22 @@ register_constexpr_fundef (tree fun, tree body)
require_potential_rvalue_constant_expression (body);
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;
}
......
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