diff mbox

cleanups for vtable-verify

Message ID CABu31nNmJtjgsyr2kHx0VHEiDsvxCaUJe5JeYHyHzs-LvwbF_w@mail.gmail.com
State New
Headers show

Commit Message

Steven Bosscher May 1, 2016, 1:34 p.m. UTC
Hello,

This patch is random cleanups on the vtable-verify code.
OK for trunk?

Ciao!
Steven

gcc/
      * vtable-verify.h (verify_vtbl_ptr_fndecl): Add GTY markers.
      (num_vtable_map_nodes): Remove extern declaration.
      (vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
      * vtable-verify.c (num_vtable_map_nodes): Make static.
      (vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
      (verify_vtbl_ptr_fndecl): Remove redundant extern declaration.

cp/
      * vtable-class-hierarchy.c (vtable_find_or_create_map_decl):
      Make static.
      (vtv_compute_class_hierarchy_transitive_closure): Eliminate uses of
      num_vtable_map_nodes in lieu of vtbl_map_nodes_vec.length() and of
      vtbl_map_nodes_vec.iterate().
      (guess_num_vtable_pointers, register_all_pairs,
      write_out_vtv_count_data, vtv_register_class_hierarchy_information,
      vtv_generate_init_routine): Likewise.
gcc/
	* vtable-verify.h (verify_vtbl_ptr_fndecl): Add GTY markers.
	(num_vtable_map_nodes): Remove extern declaration.
	(vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
	* vtable-verify.c (num_vtable_map_nodes): Make static.
	(vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
	(verify_vtbl_ptr_fndecl): Remove redundant extern declaration.

cp/
	* vtable-class-hierarchy.c (vtable_find_or_create_map_decl):
	Make static.
	(vtv_compute_class_hierarchy_transitive_closure): Eliminate uses of
	num_vtable_map_nodes in lieu of vtbl_map_nodes_vec.length() and of
	vtbl_map_nodes_vec.iterate().
	(guess_num_vtable_pointers, register_all_pairs,
	write_out_vtv_count_data, vtv_register_class_hierarchy_information,
	vtv_generate_init_routine): Likewise.

Comments

Jeff Law May 2, 2016, 3:40 p.m. UTC | #1
On 05/01/2016 07:34 AM, Steven Bosscher wrote:
> Hello,
>
> This patch is random cleanups on the vtable-verify code.
> OK for trunk?
>
> Ciao!
> Steven
>
> gcc/
>       * vtable-verify.h (verify_vtbl_ptr_fndecl): Add GTY markers.
>       (num_vtable_map_nodes): Remove extern declaration.
>       (vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
>       * vtable-verify.c (num_vtable_map_nodes): Make static.
>       (vtbl_mangled_name_types, vtbl_mangled_name_ids): Likewise.
>       (verify_vtbl_ptr_fndecl): Remove redundant extern declaration.
>
> cp/
>       * vtable-class-hierarchy.c (vtable_find_or_create_map_decl):
>       Make static.
>       (vtv_compute_class_hierarchy_transitive_closure): Eliminate uses of
>       num_vtable_map_nodes in lieu of vtbl_map_nodes_vec.length() and of
>       vtbl_map_nodes_vec.iterate().
>       (guess_num_vtable_pointers, register_all_pairs,
>       write_out_vtv_count_data, vtv_register_class_hierarchy_information,
>       vtv_generate_init_routine): Likewise.
>
OK.
jeff
diff mbox

Patch

Index: vtable-verify.h
===================================================================
--- vtable-verify.h	(revision 235623)
+++ vtable-verify.h	(working copy)
@@ -27,12 +27,8 @@  along with GCC; see the file COPYING3.  If not see
    be global because it needs to be initialized in the C++ front end, but
    used in the middle end (in the vtable verification pass).  */
 
-extern tree verify_vtbl_ptr_fndecl;
+extern GTY(()) tree verify_vtbl_ptr_fndecl;
 
-/* Global variable keeping track of how many vtable map variables we
-   have created. */
-extern unsigned num_vtable_map_nodes;
-
 /* Keep track of how many virtual calls we are actually verifying.  */
 extern int total_num_virtual_calls;
 extern int total_num_verified_vcalls;
@@ -127,10 +123,6 @@  extern bool vtv_debug;
 /* The global vector of vtbl_map_nodes.  */
 extern vec<struct vtbl_map_node *> vtbl_map_nodes_vec;
 
-/*  The global vectors for mangled class names for anonymous classes.  */
-extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_types;
-extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_ids;
-
 extern void vtbl_register_mangled_name (tree, tree);
 extern struct vtbl_map_node *vtbl_map_get_node (tree);
 extern struct vtbl_map_node *find_or_create_vtbl_map_node (tree);
Index: vtable-verify.c
===================================================================
--- vtable-verify.c	(revision 235623)
+++ vtable-verify.c	(working copy)
@@ -144,11 +144,13 @@  along with GCC; see the file COPYING3.  If not see
 
 #include "vtable-verify.h"
 
-unsigned num_vtable_map_nodes = 0;
+/* Global variable keeping track of how many vtable map variables we
+   have created. */
+static unsigned num_vtable_map_nodes = 0;
+
 int total_num_virtual_calls = 0;
 int total_num_verified_vcalls = 0;
 
-extern GTY(()) tree verify_vtbl_ptr_fndecl;
 tree verify_vtbl_ptr_fndecl = NULL_TREE;
 
 /* Keep track of whether or not any virtual call were verified.  */
@@ -305,10 +307,8 @@  static vtbl_map_table_type *vtbl_map_hash;
 vec<struct vtbl_map_node *> vtbl_map_nodes_vec;
 
 /* Vector of mangled names for anonymous classes.  */
-extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_types;
-extern GTY(()) vec<tree, va_gc> *vtbl_mangled_name_ids;
-vec<tree, va_gc> *vtbl_mangled_name_types;
-vec<tree, va_gc> *vtbl_mangled_name_ids;
+static GTY(()) vec<tree, va_gc> *vtbl_mangled_name_types;
+static GTY(()) vec<tree, va_gc> *vtbl_mangled_name_ids;
 
 /* Look up class_type (a type decl for record types) in the vtbl_mangled_names_*
    vectors.  This is a linear lookup.  Return the associated mangled name for
Index: cp/vtable-class-hierarchy.c
===================================================================
--- cp/vtable-class-hierarchy.c	(revision 235623)
+++ cp/vtable-class-hierarchy.c	(working copy)
@@ -137,8 +137,6 @@  struct work_node {
   struct work_node *next;
 };
 
-struct vtbl_map_node *vtable_find_or_create_map_decl (tree);
-
 /* As part of vtable verification the compiler generates and inserts
    calls to __VLTVerifyVtablePointer, which is in libstdc++.  This
    function builds and initializes the function decl that is used
@@ -380,7 +378,7 @@  void
 vtv_compute_class_hierarchy_transitive_closure (void)
 {
   struct work_node *worklist = NULL;
-  sbitmap inserted = sbitmap_alloc (num_vtable_map_nodes);
+  sbitmap inserted = sbitmap_alloc (vtbl_map_nodes_vec.length()); /* ??? leak? */
   unsigned i;
   unsigned j;
 
@@ -394,9 +392,9 @@  vtv_compute_class_hierarchy_transitive_closure (vo
   /* Set-up:                                                                */
   /* Find all the "leaf" nodes in the graph, and add them to the worklist.  */
   bitmap_clear (inserted);
-  for (j = 0; j < num_vtable_map_nodes; ++j)
+  struct vtbl_map_node *cur;
+  for (j = 0; vtbl_map_nodes_vec.iterate (j, &cur); ++j)
     {
-      struct vtbl_map_node *cur = vtbl_map_nodes_vec[j];
       if (cur->class_info
           && ((cur->class_info->children).length() == 0)
           && ! (bitmap_bit_p (inserted, cur->class_info->class_uid)))
@@ -412,7 +410,7 @@  vtv_compute_class_hierarchy_transitive_closure (vo
                                   find_and_remove_next_leaf_node (&worklist);
 
       gcc_assert (temp_node != NULL);
-      temp_node->descendants = sbitmap_alloc (num_vtable_map_nodes);
+      temp_node->descendants = sbitmap_alloc (vtbl_map_nodes_vec.length()); /* ??? leak? */
       bitmap_clear (temp_node->descendants);
       bitmap_set_bit (temp_node->descendants, temp_node->class_uid);
       for (i = 0; i < (temp_node->children).length(); ++i)
@@ -651,7 +649,7 @@  guess_num_vtable_pointers (struct vtv_graph_node *
   int num_vtbls_power_of_two = 1;
   unsigned i;
 
-  for (i = 0; i < num_vtable_map_nodes; ++i)
+  for (i = 0; i < vtbl_map_nodes_vec.length (); ++i)
     if (bitmap_bit_p (class_node->descendants, i))
       {
         tree class_type = vtbl_map_nodes_vec[i]->class_info->class_type;
@@ -901,10 +899,10 @@  register_all_pairs (tree body)
   bool registered_at_least_one = false;
   vec<tree> *vtbl_ptr_array = NULL;
   unsigned j;
+  struct vtbl_map_node *current;
 
-  for (j = 0; j < num_vtable_map_nodes; ++j)
+  for (j = 0; vtbl_map_nodes_vec.iterate (j, &current); ++j)
     {
-      struct vtbl_map_node *current = vtbl_map_nodes_vec[j];
       unsigned i = 0;
       tree base_class = current->class_info->class_type;
       tree base_ptr_var_decl = current->vtbl_map_decl;
@@ -931,7 +929,7 @@  register_all_pairs (tree body)
 
       vec_alloc (vtbl_ptr_array, 10);
 
-      for (i = 0; i < num_vtable_map_nodes; ++i)
+      for (i = 0; i < vtbl_map_nodes_vec.length (); ++i)
         if (bitmap_bit_p (current->class_info->descendants, i))
           {
             struct vtbl_map_node *vtbl_class_node = vtbl_map_nodes_vec[i];
@@ -1110,9 +1108,9 @@  write_out_vtv_count_data (void)
       return;
     }
 
-  for (unsigned i = 0; i < num_vtable_map_nodes; ++i)
+  struct vtbl_map_node *current;
+  for (unsigned i = 0; vtbl_map_nodes_vec.iterate (i, &current); ++i)
     {
-      struct vtbl_map_node *current = vtbl_map_nodes_vec[i];
       if (!current->is_used
           && current->registered->size() == 0)
         unused_vtbl_map_vars++;
@@ -1141,7 +1139,7 @@  vtv_register_class_hierarchy_information (tree ini
  
   init_functions ();
 
-  if (num_vtable_map_nodes == 0)
+  if (vtbl_map_nodes_vec.length () == 0)
     return false;
 
   /* Add class hierarchy pairs to the vtable map data structure.  */
@@ -1204,7 +1202,7 @@  vtv_generate_init_routine (void)
    this process it also creates the global vtable map variable for the
    class.  */
 
-struct vtbl_map_node *
+static struct vtbl_map_node *
 vtable_find_or_create_map_decl (tree base_type)
 {
   char *var_name = NULL;