This is the mail archive of the gcc-bugs@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]

[Bug tree-optimization/55264] [4.6/4.7/4.8 Regression] ICE: in ipa_make_edge_direct_to_target, at ipa-prop.c:2141 with -O2 -fno-early-inlining -fno-weak


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55264

Aldy Hernandez <aldyh at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org,
                   |                            |jason at gcc dot gnu.org

--- Comment #3 from Aldy Hernandez <aldyh at gcc dot gnu.org> 2012-11-27 15:34:06 UTC ---
When compiled with -fno-weak, we re-use the out-of-line copy in
clone_inlined_nodes(), around here:

 /* We may eliminate the need for out-of-line copy to be output.
     In that case just go ahead and re-use it.  This is not just an
     memory optimization.  Making offline copy of fuction disappear
     from the program will improve future decisions on inlining.  */

This happens because the conditional can_remove_node_now_p_1() returns true for
virtuals that are not weak:

      /* Inlining might enable more devirtualizing, so we want to remove
         those only after all devirtualizable virtual calls are processed.
         Lacking may edges in callgraph we just preserve them post
         inlining.  */
      && (!DECL_VIRTUAL_P (node->symbol.decl)
          || (!DECL_COMDAT (node->symbol.decl)
          && !DECL_EXTERNAL (node->symbol.decl)))

When we re-use the out-of-line copy in clone_inlined_nodes(), we end up setting
inlined_to here:

    e->callee->global.inlined_to = e->caller;

This causes the ICE in ipa_make_edge_direct_to_target, because inlined_to is
non-NULL:

  /* We can not make edges to inline clones.  It is bug that someone removed
     the cgraph node too early.  */
  gcc_assert (!callee->global.inlined_to);

Any tips on how to proceed from here?


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