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,
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))
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;
}
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
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;
}