https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63551

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-10-16
                 CC|                            |hubicka at gcc dot gnu.org
   Target Milestone|---                         |5.0
            Summary|wrong code (segfaults) at   |[4.9/5 Regression] wrong
                   |-Os on x86_64-linux-gnu     |code (segfaults) at -Os on
                   |                            |x86_64-linux-gnu
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.

fn2 ()
{
  <bb 2>:
  d = 0;
  __builtin_unreachable ();

}

?

Somehow IPA inline inserts this call.

Considering fn1/2 with 7 size
 to be inlined into fn2/3 in t.c:22
 Estimated badness is -1073741826, frequency 1.00.
    Badness calculation for fn2/3 -> fn1/2
      size growth -2, time 0  big_speedup
      -1073741826: Growth -2 <= 0
Introduced new external node (__builtin_unreachable/7).
Processing frequency fn1

from ipa-inline-analysis.c:edge_set_predicate

757       if (predicate && false_predicate_p (predicate) && e->callee)
758         {
759           struct cgraph_node *callee = !e->inline_failed ? e->callee :
NULL;
760
761           e->redirect_callee (cgraph_node::get_create
762                                 (builtin_decl_implicit
(BUILT_IN_UNREACHABLE)));
763           e->inline_failed = CIF_UNREACHABLE;
764           if (callee)
765             callee->remove_symbol_and_inline_clones ();

thus there is some bug in predicate compute.

Reply via email to