semantics.c (register_constexpr_fundef): Add to hash table here.
authorJason Merrill <jason@redhat.com>
Wed, 11 May 2011 21:30:02 +0000 (17:30 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Wed, 11 May 2011 21:30:02 +0000 (17:30 -0400)
* semantics.c (register_constexpr_fundef): Add to hash table here.
(validate_constexpr_fundecl): Not here.

From-SVN: r173681

gcc/cp/ChangeLog
gcc/cp/semantics.c

index d6241cd4a2c5f8c53be59ed0d60eb036de576e28..6452fd60c4e73ff18b5b841231a1f3a9603088bd 100644 (file)
@@ -1,5 +1,8 @@
 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,
index bfe233e52093e02a9f629e5064867a2dbb99776c..e12f03623e30802604ee8e277020b550d8fb83b2 100644 (file)
@@ -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;
 }