cp-tree.h (initialize_artificial_var): Declare.
authorMark Mitchell <mark@codesourcery.com>
Mon, 30 Aug 2004 22:54:06 +0000 (22:54 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 30 Aug 2004 22:54:06 +0000 (22:54 +0000)
* cp-tree.h (initialize_artificial_var): Declare.
* decl.c (initialize_artifical_var): New function.
* class.c (initialize_array): Remove.
(initialize_vtable): Use initialize_artificial_var.
(build_vtt): Likewise.
(build_ctor_vtbl_group): Likewise.

From-SVN: r86809

gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.h
gcc/cp/decl.c

index 97296e940a560aaa49012acfd4d00e7e0c5f66dd..eea871b4c82bed630e523b76a6bc604a2e88d5a6 100644 (file)
@@ -1,3 +1,12 @@
+2004-08-30  Mark Mitchell  <mark@codesourcery.com>
+
+       * cp-tree.h (initialize_artificial_var): Declare.
+       * decl.c (initialize_artifical_var): New function.
+       * class.c (initialize_array): Remove.
+       (initialize_vtable): Use initialize_artificial_var.
+       (build_vtt): Likewise.
+       (build_ctor_vtbl_group): Likewise.
+
 2004-08-30  Richard Henderson  <rth@redhat.com>
 
        * class.c (build_base_path): Use build_address directly.
index 272c4d6a0ff11f98a395c9db995b1471e307a607..21bdfdd2f6f13ee0bbf35fa96ce752b29f54ece3 100644 (file)
@@ -170,7 +170,6 @@ static void dump_vtt (tree, tree);
 static void dump_thunk (FILE *, int, tree);
 static tree build_vtable (tree, tree, tree);
 static void initialize_vtable (tree, tree);
-static void initialize_array (tree, tree);
 static void layout_nonempty_base_or_field (record_layout_info,
                                                   tree, tree, splay_tree);
 static tree end_of_class (tree, int);
@@ -6681,20 +6680,10 @@ initialize_vtable (tree binfo, tree inits)
 
   layout_vtable_decl (binfo, list_length (inits));
   decl = get_vtbl_decl_for_binfo (binfo);
-  initialize_array (decl, inits);
+  initialize_artificial_var (decl, inits);
   dump_vtable (BINFO_TYPE (binfo), binfo, decl);
 }
 
-/* Initialize DECL (a declaration for a namespace-scope array) with
-   the INITS.  */
-
-static void
-initialize_array (tree decl, tree inits)
-{
-  DECL_INITIAL (decl) = build_constructor (NULL_TREE, inits);
-  cp_finish_decl (decl, DECL_INITIAL (decl), NULL_TREE, 0);
-}
-
 /* Build the VTT (virtual table table) for T.
    A class requires a VTT if it has virtual bases.
    
@@ -6731,7 +6720,7 @@ build_vtt (tree t)
                                 
   /* Now, build the VTT object itself.  */
   vtt = build_vtable (t, get_vtt_name (t), type);
-  initialize_array (vtt, inits);
+  initialize_artificial_var (vtt, inits);
   /* Add the VTT to the vtables list.  */
   TREE_CHAIN (vtt) = TREE_CHAIN (CLASSTYPE_VTABLES (t));
   TREE_CHAIN (CLASSTYPE_VTABLES (t)) = vtt;
@@ -7018,7 +7007,7 @@ build_ctor_vtbl_group (tree binfo, tree t)
 
   /* Initialize the construction vtable.  */
   CLASSTYPE_VTABLES (t) = chainon (CLASSTYPE_VTABLES (t), vtbl);
-  initialize_array (vtbl, inits);
+  initialize_artificial_var (vtbl, inits);
   dump_vtable (t, binfo, vtbl);
 }
 
index 49c9d4714515aeec8e6fc4dcc9f49fb79454cb8e..9e894ff2370a18102966f57fe75c14b239d5a73b 100644 (file)
@@ -3795,6 +3795,7 @@ extern tree builtin_function (const char *name, tree type,
 extern tree check_elaborated_type_specifier     (enum tag_types, tree, bool);
 extern void warn_extern_redeclared_static (tree, tree);
 extern bool cp_missing_noreturn_ok_p           (tree);
+extern void initialize_artificial_var            (tree, tree);
 
 extern bool have_extern_spec;
 
index bd7098289b2c2e6031e1afce92801c1edee71a3b..2932ae9a484fce3af031909ec8729f13c107ed05 100644 (file)
@@ -4640,6 +4640,22 @@ initialize_local_var (tree decl, tree init)
     finish_decl_cleanup (decl, cleanup);
 }
 
+/* DECL is a VAR_DECL for a compiler-generated variable with static
+   storage duration (like a virtual table) whose initializer is a
+   compile-time constant.  Initialize the variable and provide it to
+   the back end.  */
+
+void
+initialize_artificial_var (tree decl, tree init)
+{
+  DECL_INITIAL (decl) = build_constructor (NULL_TREE, init);
+  DECL_INITIALIZED_P (decl) = 1;
+  determine_visibility (decl);
+  layout_var_decl (decl);
+  maybe_commonize_var (decl);
+  make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
+}
+
 /* Finish processing of a declaration;
    install its line number and initial value.
    If the length of an array type is not known before,