This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, PR70187] Safely use nodes[0] in possible_polymorphic_call_targets


Hi,

this patch fixes lto PR70187, a 6 regression.

We run into an ICE in in possible_polymorphic_call_targets when accessing nodes[0]->decl because nodes == vNULL:
...
  if (!outer_type->all_derivations_known)
    {
      if (!speculative && final_warning_records
          && TREE_CODE (TREE_TYPE (nodes[0]->decl)) == METHOD_TYPE)
        {
          if (complete
              && nodes.length () == 1
              && warn_suggest_final_types
              && !outer_type->derived_types.length ())
            {
...

The patch fixes this by moving the 'nodes.length () == 1' test to before the use of nodes[0].

Bootstrapped and reg-tested on x86_64.

OK for stage4 trunk?

Thanks,
- Tom
Safely use nodes[0] in possible_polymorphic_call_targets

2016-03-16  Tom de Vries  <tom@codesourcery.com>

	PR lto/70187
	* ipa-devirt.c (possible_polymorphic_call_targets): Move
	nodes.length () == 1 test to before first nodes[0] access.

---
 gcc/ipa-devirt.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index e4fb562..4df171b 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -3178,10 +3178,10 @@ possible_polymorphic_call_targets (tree otr_type,
 	  if (!outer_type->all_derivations_known)
 	    {
 	      if (!speculative && final_warning_records
+		  && nodes.length () == 1
 		  && TREE_CODE (TREE_TYPE (nodes[0]->decl)) == METHOD_TYPE)
 		{
 		  if (complete
-		      && nodes.length () == 1
 		      && warn_suggest_final_types
 		      && !outer_type->derived_types.length ())
 		    {
@@ -3197,7 +3197,6 @@ possible_polymorphic_call_targets (tree otr_type,
 		    }
 		  if (complete
 		      && warn_suggest_final_methods
-		      && nodes.length () == 1
 		      && types_same_for_odr (DECL_CONTEXT (nodes[0]->decl),
 					     outer_type->type))
 		    {

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]