]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR ipa/61462 (ICE in ipa-prop.c:2562 caused by missing edge gimple call stmt)
authorMartin Liska <mliska@suse.cz>
Thu, 12 Jun 2014 07:48:23 +0000 (09:48 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Thu, 12 Jun 2014 07:48:23 +0000 (07:48 +0000)
PR ipa/61462
* ipa-prop.c (ipa_make_edge_direct_to_target): Check that gimple call
statement is reachable.

From-SVN: r211490

gcc/ChangeLog
gcc/ipa-prop.c

index 04736b8cd9f98ce6b4fff74e594c4f294802efec..a8db34b416d94fcfcbacbdc46cee9dab363e59bb 100644 (file)
@@ -1,3 +1,9 @@
+2014-06-12  Martin Liska  <mliska@suse.cz>
+
+       PR ipa/61462
+       * ipa-prop.c (ipa_make_edge_direct_to_target): Check that gimple call
+       statement is reachable. 
+
 2014-06-11  Jan Hubicka  <hubicka@ucw.cz>
 
        * symtab.c (section_hash): New hash.
index d02093a00f4a6b94940f116f7e3691de1b83b48c..b67deedd77707ebd56f6caa432cbf0ed82c72b15 100644 (file)
@@ -2673,13 +2673,19 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
 
           if (dump_enabled_p ())
            {
-             location_t loc = gimple_location (ie->call_stmt);
-             dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
-                              "discovered direct call to non-function in %s/%i, "
-                              "making it __builtin_unreachable\n",
-                               ie->caller->name (),
-                               ie->caller->order);
+             const char *fmt = "discovered direct call to non-function in %s/%i, "
+                               "making it __builtin_unreachable\n";
+
+             if (ie->call_stmt)
+               {
+                 location_t loc = gimple_location (ie->call_stmt);
+                 dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
+                                  ie->caller->name (), ie->caller->order);
+               }
+             else if (dump_file)
+               fprintf (dump_file, fmt, ie->caller->name (), ie->caller->order);
            }
+
          target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
          callee = cgraph_get_create_node (target);
          unreachable = true;
@@ -2739,10 +2745,18 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target)
      }
   if (dump_enabled_p ())
     {
-      location_t loc = gimple_location (ie->call_stmt);
-      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
-                      "converting indirect call in %s to direct call to %s\n",
-                      ie->caller->name (), callee->name ());
+      const char *fmt = "converting indirect call in %s to direct call to %s\n";
+
+      if (ie->call_stmt)
+       {
+         location_t loc = gimple_location (ie->call_stmt);
+
+         dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc, fmt,
+                          ie->caller->name (), callee->name ());
+
+       }
+      else if (dump_file)
+       fprintf (dump_file, fmt, ie->caller->name (), callee->name ());
     }
   ie = cgraph_make_edge_direct (ie, callee);
   es = inline_edge_summary (ie);