cp-tree.h (skip_rtti_stuff): Adjust prototype.
authorMark Mitchell <mark@codesourcery.com>
Sun, 2 Jan 2000 04:04:05 +0000 (04:04 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sun, 2 Jan 2000 04:04:05 +0000 (04:04 +0000)
* cp-tree.h (skip_rtti_stuff): Adjust prototype.
* class.c (skip_rtti_stuff): Reorganize parameters and return value.
(modify_one_vtable): Adjust.
(fixup_vtable_deltas1): Likewise.
(override_one_vtable): Likewise.
* search.c (get_abstract_virtuals_1): Likewise.
(get_pure_virtuals): Likewise.
(expand_upcast_fixups): Likewise.
* tree.c (debug_binfo): Likewise.

From-SVN: r31163

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

index eb51cc2303f85ea78e20e5c1b79b208a50a56f1c..d1762d63c9ea22ae4bfdae31f684e0654bf94d13 100644 (file)
@@ -1,5 +1,15 @@
 2000-01-01  Mark Mitchell  <mark@codesourcery.com>
 
+       * cp-tree.h (skip_rtti_stuff): Adjust prototype.
+       * class.c (skip_rtti_stuff): Reorganize parameters and return value.
+       (modify_one_vtable): Adjust.
+       (fixup_vtable_deltas1): Likewise.
+       (override_one_vtable): Likewise.
+       * search.c (get_abstract_virtuals_1): Likewise.
+       (get_pure_virtuals): Likewise.
+       (expand_upcast_fixups): Likewise.
+       * tree.c (debug_binfo): Likewise.
+       
        * class.c (build_vtable): Don't return a value.  Don't rebuild
        vtables for bases that have already been handled.
        (prepare_fresh_vtable): Don't rebuild vtables for bases that have
index dfe1a1565869c694aa801aba5ab293d9eb824d43..fe5d29685dd5eea8932b3113e841c73ae94254d0 100644 (file)
@@ -2384,39 +2384,48 @@ get_class_offset (context, t, binfo, fndecl)
   return offset;
 }
 
-/* Skip RTTI information at the front of the virtual list.  */
+/* Return the BINFO_VIRTUALS list for BINFO, without the RTTI stuff at
+   the front.  If non-NULL, N is set to the number of entries
+   skipped.  */
 
-unsigned HOST_WIDE_INT
-skip_rtti_stuff (virtuals, t)
-     tree *virtuals, t;
+tree
+skip_rtti_stuff (binfo, t, n)
+     tree binfo;
+     tree t;
+     unsigned HOST_WIDE_INT *n;
 {
-  int n;
+  tree virtuals;
 
   if (CLASSTYPE_COM_INTERFACE (t))
     return 0;
 
-  n = 0;
-  if (*virtuals)
+  if (n)
+    *n = 0;
+  virtuals = BINFO_VIRTUALS (binfo);
+  if (virtuals)
     {
       /* We always reserve a slot for the offset/tdesc entry.  */
-      ++n;
-      *virtuals = TREE_CHAIN (*virtuals);
+      if (n)
+       ++*n;
+      virtuals = TREE_CHAIN (virtuals);
     }
-  if (flag_vtable_thunks && *virtuals)
+  if (flag_vtable_thunks && virtuals)
     {
       /* The second slot is reserved for the tdesc pointer when thunks
          are used.  */
-      ++n;
-      *virtuals = TREE_CHAIN (*virtuals);
+      if (n)
+       ++*n;
+      virtuals = TREE_CHAIN (virtuals);
     }
-  return n;
+
+  return virtuals;
 }
 
 static void
 modify_one_vtable (binfo, t, fndecl)
      tree binfo, t, fndecl;
 {
-  tree virtuals = BINFO_VIRTUALS (binfo);
+  tree virtuals;
   unsigned HOST_WIDE_INT n;
   
   /* update rtti entry */
@@ -2430,7 +2439,7 @@ modify_one_vtable (binfo, t, fndecl)
   if (fndecl == NULL_TREE)
     return;
 
-  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
+  virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
 
   while (virtuals)
     {
@@ -2519,10 +2528,10 @@ static void
 fixup_vtable_deltas1 (binfo, t)
      tree binfo, t;
 {
-  tree virtuals = BINFO_VIRTUALS (binfo);
+  tree virtuals;
   unsigned HOST_WIDE_INT n;
   
-  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
+  virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
 
   while (virtuals)
     {
@@ -2677,8 +2686,8 @@ static void
 override_one_vtable (binfo, old, t)
      tree binfo, old, t;
 {
-  tree virtuals = BINFO_VIRTUALS (binfo);
-  tree old_virtuals = BINFO_VIRTUALS (old);
+  tree virtuals;
+  tree old_virtuals;
   enum { REUSE_NEW, REUSE_OLD, UNDECIDED, NEITHER } choose = UNDECIDED;
 
   /* If we have already committed to modifying it, then don't try and
@@ -2686,8 +2695,8 @@ override_one_vtable (binfo, old, t)
   if (BINFO_NEW_VTABLE_MARKED (binfo))
     choose = NEITHER;
 
-  skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
-  skip_rtti_stuff (&old_virtuals, BINFO_TYPE (binfo));
+  virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), NULL);
+  old_virtuals = skip_rtti_stuff (old, BINFO_TYPE (binfo), NULL);
 
   while (virtuals)
     {
index 9f7f68515babe807fa8466225f1f77d36ec07496..24ff231c6054184478c59a759bdd9cee33e03c51 100644 (file)
@@ -3394,7 +3394,7 @@ extern void push_lang_context                     PROTO((tree));
 extern void pop_lang_context                   PROTO((void));
 extern tree instantiate_type                   PROTO((tree, tree, int));
 extern void print_class_statistics             PROTO((void));
-extern unsigned HOST_WIDE_INT skip_rtti_stuff  PROTO((tree *, tree));
+extern tree skip_rtti_stuff                    PROTO((tree, tree, unsigned HOST_WIDE_INT *));
 extern void build_self_reference               PROTO((void));
 extern void warn_hidden                                PROTO((tree));
 extern tree get_enclosing_class                        PROTO((tree));
index 798099a4d9efd7ffd626c350a18ded2faa07c3b7..d6269e378e40b94df90c8264aa9f8c1bdac6decf 100644 (file)
@@ -2129,9 +2129,9 @@ get_abstract_virtuals_1 (binfo, do_self, abstract_virtuals)
   /* Should we use something besides CLASSTYPE_VFIELDS? */
   if (do_self && CLASSTYPE_VFIELDS (BINFO_TYPE (binfo)))
     {
-      tree virtuals = BINFO_VIRTUALS (binfo);
+      tree virtuals;
 
-      skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
+      virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), NULL);
 
       while (virtuals)
        {
@@ -2160,9 +2160,9 @@ get_pure_virtuals (type)
                                               
   for (vbases = CLASSTYPE_VBASECLASSES (type); vbases; vbases = TREE_CHAIN (vbases))
     {
-      tree virtuals = BINFO_VIRTUALS (vbases);
+      tree virtuals;
 
-      skip_rtti_stuff (&virtuals, BINFO_TYPE (vbases));
+      virtuals = skip_rtti_stuff (vbases, BINFO_TYPE (vbases), NULL);
 
       while (virtuals)
        {
@@ -2598,7 +2598,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
                      vbase_offsets)
      tree binfo, addr, orig_addr, vbase, vbase_addr, t, *vbase_offsets;
 {
-  tree virtuals = BINFO_VIRTUALS (binfo);
+  tree virtuals;
   tree vc;
   tree delta;
   unsigned HOST_WIDE_INT n;
@@ -2613,7 +2613,7 @@ expand_upcast_fixups (binfo, addr, orig_addr, vbase, vbase_addr, t,
       *vbase_offsets = delta;
     }
 
-  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (binfo));
+  virtuals = skip_rtti_stuff (binfo, BINFO_TYPE (binfo), &n);
 
   while (virtuals)
     {
index ce26ec9831518856c4c9db615822a1b1a058957e..f5e24740200020be6ed6cef0f2dfe83d34c80811 100644 (file)
@@ -1165,9 +1165,7 @@ debug_binfo (elem)
   else
     fprintf (stderr, "no vtable decl yet\n");
   fprintf (stderr, "virtuals:\n");
-  virtuals = BINFO_VIRTUALS (elem);
-
-  n = skip_rtti_stuff (&virtuals, BINFO_TYPE (elem));
+  virtuals = skip_rtti_stuff (elem, BINFO_TYPE (elem), &n);
 
   while (virtuals)
     {