re PR middle-end/20991 (ICE in cgraph_mark_reachable_node)
authorJan Hubicka <jh@suse.cz>
Sun, 17 Apr 2011 16:37:07 +0000 (18:37 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sun, 17 Apr 2011 16:37:07 +0000 (16:37 +0000)
* cgraph.c (cgraph_clone_node): Do not handle vtable_method
* cgraph.h (struct cgraph_local_info): Drop vtable_method.
* cgraphunit.c (cgraph_copy_node_for_versioning): Drop vtable_method.
* lto-cgraph.c (lto_output_node, input_overwrite_node): Drop vtable method.
* gimple-fold.c (can_refer_decl_in_current_unit_p): Mention PR20991 in
gimple-fold.c
* varasm.c (mark_decl_referenced): Drop vtable_method handling code.
* cp/class.c (cp_fold_obj_type_ref): Drop vtable_method.

From-SVN: r172613

gcc/ChangeLog
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphunit.c
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/gimple-fold.c
gcc/lto-cgraph.c
gcc/varasm.c

index 4af4017c8966a6de3d4952e60978ab5ba0b66dc8..f8287a825c3048e8b20838272444cc5216bd720c 100644 (file)
@@ -1,3 +1,13 @@
+2011-04-17  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.c (cgraph_clone_node): Do not handle vtable_method
+       * cgraph.h (struct cgraph_local_info): Drop vtable_method.
+       * cgraphunit.c (cgraph_copy_node_for_versioning): Drop vtable_method.
+       * lto-cgraph.c (lto_output_node, input_overwrite_node): Drop vtable method.
+       * gimple-fold.c (can_refer_decl_in_current_unit_p): Mention PR20991 in
+       gimple-fold.c
+       * varasm.c (mark_decl_referenced): Drop vtable_method handling code.
+
 2011-04-17  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR lto/48538
index 31c5b59960a5e9f8f6e6be8dc5653ba57e3fa6b0..eb49bc7c3f2bcc7f30cb331db3fe9991866ba164 100644 (file)
@@ -2161,7 +2161,6 @@ cgraph_clone_node (struct cgraph_node *n, tree decl, gcov_type count, int freq,
   new_node->local = n->local;
   new_node->local.externally_visible = false;
   new_node->local.local = true;
-  new_node->local.vtable_method = false;
   new_node->global = n->global;
   new_node->rtl = n->rtl;
   new_node->count = count;
index 199349b3991ca33ae70cc4de4b5e5d033d295705..69fd19adf4adb9561b28cf1150368f52d5ed3326 100644 (file)
@@ -95,10 +95,6 @@ struct GTY(()) cgraph_local_info {
   /* True when the function has been originally extern inline, but it is
      redefined now.  */
   unsigned redefined_extern_inline : 1;
-
-  /* True if the function is going to be emitted in some other translation
-     unit, referenced from vtable.  */
-  unsigned vtable_method : 1;
 };
 
 /* Information about the function that needs to be computed globally
index 6b3ddb5562f145757b0d3453d5a889c69ea5ecf3..adfb0d27aad697a33727fa363e8940f89e809659 100644 (file)
@@ -1991,7 +1991,6 @@ cgraph_copy_node_for_versioning (struct cgraph_node *old_version,
    new_version->local = old_version->local;
    new_version->local.externally_visible = false;
    new_version->local.local = true;
-   new_version->local.vtable_method = false;
    new_version->global = old_version->global;
    new_version->rtl = old_version->rtl;
    new_version->reachable = true;
index aae532a8e1a937714c15567d54ed1295b413c981..cd71a1dde5fc3ea17d26ed9cb8b7b7cfdc32efc2 100644 (file)
@@ -1,3 +1,7 @@
+2011-04-17  Jan Hubicka  <jh@suse.cz>
+
+       * class.c (cp_fold_obj_type_ref): Drop vtable_method.
+
 2011-04-15  Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
 
        Implement N3271
index 3216068811b22cadf7aa9f79c8aff42c08ac65ed..5578eb2bd9b2af434deb25ccde07fe2eb4c2bd36 100644 (file)
@@ -8402,8 +8402,6 @@ cp_fold_obj_type_ref (tree ref, tree known_type)
                                  DECL_VINDEX (fndecl)));
 #endif
 
-  cgraph_get_node (fndecl)->local.vtable_method = true;
-
   return build_address (fndecl);
 }
 
index f1eb98e329ffe8d247f86c92e92c8728218f28e4..f629fd565a171a580636c522426a36f683d8bb63 100644 (file)
@@ -80,7 +80,10 @@ can_refer_decl_in_current_unit_p (tree decl)
     return true;
   /* We are not at ltrans stage; so don't worry about WHOPR.
      Also when still gimplifying all referred comdat functions will be
-     produced.  */
+     produced.
+     ??? as observed in PR20991 for already optimized out comdat virtual functions
+     we may not neccesarily give up because the copy will be output elsewhere when
+     corresponding vtable is output.  */
   if (!flag_ltrans && (!DECL_COMDAT (decl) || !cgraph_function_flags_ready))
     return true;
   /* If we already output the function body, we are safe.  */
index 7f0910b0e879b7b186eff29b51116c2623b928c4..c8b0797f3a7fa2d0263eaf748c501f16854c3376 100644 (file)
@@ -491,7 +491,6 @@ lto_output_node (struct lto_simple_output_block *ob, struct cgraph_node *node,
   bp_pack_value (&bp, node->local.finalized, 1);
   bp_pack_value (&bp, node->local.can_change_signature, 1);
   bp_pack_value (&bp, node->local.redefined_extern_inline, 1);
-  bp_pack_value (&bp, node->local.vtable_method, 1);
   bp_pack_value (&bp, node->needed, 1);
   bp_pack_value (&bp, node->address_taken, 1);
   bp_pack_value (&bp, node->abstract_and_needed, 1);
@@ -927,7 +926,6 @@ input_overwrite_node (struct lto_file_decl_data *file_data,
   node->local.finalized = bp_unpack_value (bp, 1);
   node->local.can_change_signature = bp_unpack_value (bp, 1);
   node->local.redefined_extern_inline = bp_unpack_value (bp, 1);
-  node->local.vtable_method = bp_unpack_value (bp, 1);
   node->needed = bp_unpack_value (bp, 1);
   node->address_taken = bp_unpack_value (bp, 1);
   node->abstract_and_needed = bp_unpack_value (bp, 1);
index 40a38f57bc933c81af2d8e9e529579f83a0c9b14..e60c95eafbef330ddb3478f7c5026540afd470de 100644 (file)
@@ -2201,8 +2201,7 @@ mark_decl_referenced (tree decl)
         definition.  */
       struct cgraph_node *node = cgraph_get_create_node (decl);
       if (!DECL_EXTERNAL (decl)
-         && (!node->local.vtable_method || !cgraph_global_info_ready
-             || !node->local.finalized))
+         && !node->local.finalized)
        cgraph_mark_needed_node (node);
     }
   else if (TREE_CODE (decl) == VAR_DECL)