[Bug ipa/85817] New: [9 Regression] ICE in expand_call at gcc/calls.c:4291

marxin at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu May 17 10:08:00 GMT 2018


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

            Bug ID: 85817
           Summary: [9 Regression] ICE in expand_call at gcc/calls.c:4291
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: marxin at gcc dot gnu.org
                CC: marxin at gcc dot gnu.org, prathamesh3492 at gcc dot gnu.org
  Target Milestone: ---

Starting from r260250 I see ICE in GIMP being built with -O3 and -flto.
Unfortunately it happens in ltrans, thus it's hard to reduce a reproducer. So:

$ ./lto1 -quiet -dumpdir .libs/ -dumpbase gimp-2.9.ltrans3 -mtune=generic
-march=x86-64 -mtune=generic -march=x86-64 -auxbase-strip
gimp-2.9.ltrans3.ltrans.o -O3 -O3 -O3 -Werror=missing-prototypes -Wtype-limits
-version -fno-openacc -fno-common -fdiagnostics-show-option -fopenmp -fltrans
/home/marxin/BIG/buildbot/slave/source/gimp/app/gimp-2.9.ltrans3.o -o
gimp-2.9.ltrans3.s
GNU GIMPLE (GCC) version 9.0.0 20180515 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 7.3.1 20180323 [gcc-7-branch revision
258812], GMP version 6.1.2, MPFR version 4.0.1-p6, MPC version 1.1.0, isl
version isl-0.19-GMP

GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU GIMPLE (GCC) version 9.0.0 20180515 (experimental) (x86_64-pc-linux-gnu)
        compiled by GNU C version 7.3.1 20180323 [gcc-7-branch revision
258812], GMP version 6.1.2, MPFR version 4.0.1-p6, MPC version 1.1.0, isl
version isl-0.19-GMP

GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
during RTL pass: expand
gimpwindow.c: In function ‘gimp_window_key_press_event’:
gimpwindow.c:200:9: internal compiler error: Segmentation fault
0xf336c9 crash_signal
        ../../gcc/toplev.c:325
0x8d2290 expand_call(tree_node*, rtx_def*, int)
        ../../gcc/calls.c:4287
0xa954be expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
        ../../gcc/expr.c:11011
0xa8734c expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier,
rtx_def**, bool)
        ../../gcc/expr.c:8235
0x8e4c27 expand_expr
        ../../gcc/expr.h:280
0x8ede19 expand_call_stmt
        ../../gcc/cfgexpand.c:2690
0x8f1661 expand_gimple_stmt_1
        ../../gcc/cfgexpand.c:3644
0x8f1dbb expand_gimple_stmt
        ../../gcc/cfgexpand.c:3810
0x8fab6e expand_gimple_basic_block
        ../../gcc/cfgexpand.c:5839
0x8fc7f9 execute
        ../../gcc/cfgexpand.c:6445

(gdb) p valreg
$2 = (rtx) 0x0

(gdb) p debug_tree(exp)
 <call_expr 0x7ffff648a2d0
    type <void_type 0x7ffff67bbf18 void VOID
        align:8 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality
        pointer_to_this <pointer_type 0x7ffff67c20a8>>
    side-effects nothrow
    fn <addr_expr 0x7ffff64adc40
        type <pointer_type 0x7ffff65ea150 type <function_type 0x7ffff65dd348>
            unsigned DI
            size <integer_cst 0x7ffff67a7be8 constant 64>
            unit-size <integer_cst 0x7ffff67a7c00 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1
structural-equality context <translation_unit_decl 0x7ffff67b1168 app.c>>
        constant
        arg:0 <function_decl 0x7ffff6699300 gimp_lebl_dialog type
<function_type 0x7ffff65e11f8>
            addressable used nothrow public external function-specific-target
function-specific-opt QI lebl-dialog.c:774:1 align:8 warn_if_not_align:0
context <translation_unit_decl 0x7ffff67b1348 lebl-dialog.c>
            (mem:QI (symbol_ref:DI ("gimp_lebl_dialog") [flags 0x43]
<function_decl 0x7ffff6699300 gimp_lebl_dialog>) [0  S1 A8])>>
    gimpwindow.c:200:9 start: gimpwindow.c:200:9 finish: gimpwindow.c:200:9>

Optimized dump looks as follows:

;; Function gimp_window_key_press_event (gimp_window_key_press_event,
funcdef_no=194, decl_uid=6164, cgraph_uid=264, symbol_order=54507)

gimp_window_key_press_event (struct GtkWidget * widget, struct GdkEventKey *
event)
{
  struct GtkWidgetClass * widget_class;
  static guint32 val = 0;
  gboolean __r;
  GType __t;
  gboolean __r;
  GType __t;
  gboolean __r;
  GType __t;
  static const char __func__[28] = <<< error >>>;
  gboolean handled;
  gboolean enable_mnemonics;
  GdkModifierType accel_mods;
  struct GtkWidget * focus;
  struct GtkWindow * window;
  struct GimpWindow * gimp_window;
  long unsigned int _1;
  long unsigned int _2;
  struct GTypeClass * _3;
  long unsigned int _4;
  struct GtkWidget * _9;
  <unnamed type> _10;
  unsigned int _11;
  unsigned int _12;
  unsigned int _13;
  unsigned int _14;
  unsigned int _15;
  unsigned int _16;
  unsigned int _17;
  struct GimpWindowPrivate * _19;
  struct GtkWidget * _20;
  unsigned int _23;
  unsigned int _24;
  <unnamed type> _25;
  unsigned int _26;
  <unnamed type> _27;
  unsigned int _28;
  unsigned int _29;
  unsigned int _30;
  <unnamed type> _31;
  unsigned int _32;
  long unsigned int _33;
  gboolean (*<T879>) (struct GtkWidget *, struct GdkEventKey *) _34;
  <unnamed type> _35;
  unsigned int _36;
  int _41;
  <unnamed type> _187;
  unsigned int prephitmp_189;
  unsigned int pretmp_191;
  struct GtkSettings * _195;
  int _197;
  unsigned int pretmp_199;
  struct GtkSettings * _205;
  int _207;

  <bb 2> [local count: 1073741825]:
  _1 = gimp_window_get_type ();
  gimp_window_54 = g_type_check_instance_cast (widget_52(D), _1);
  _2 = gtk_window_get_type ();
  window_56 = g_type_check_instance_cast (widget_52(D), _2);
  focus_58 = gtk_window_get_focus (window_56);
  if (focus_58 != 0B)
    goto <bb 3>; [70.00%]
  else
    goto <bb 11>; [30.00%]

  <bb 3> [local count: 751619277]:
  __t_59 = gtk_editable_get_type ();
  _3 = MEM[(struct GTypeInstance *)focus_58].g_class;
  if (_3 != 0B)
    goto <bb 4>; [70.00%]
  else
    goto <bb 43>; [30.00%]

  <bb 4> [local count: 526133494]:
  _4 = _3->g_type;
  if (_4 == __t_59)
    goto <bb 5>; [34.00%]
  else
    goto <bb 41>; [66.00%]

  <bb 5> [local count: 743388553]:
  handled_71 = gtk_window_propagate_key_event (window_56, event_69(D));
  if (handled_71 != 0)
    goto <bb 9>; [50.00%]
  else
    goto <bb 8>; [50.00%]

  <bb 6> [local count: 83138624]:
  # __t_219 = PHI <__t_212(39), __t_210(37)>
  __r_66 = g_type_check_instance_is_a (focus_58, __t_219);
  if (__r_66 != 0)
    goto <bb 5>; [67.00%]
  else
    goto <bb 7>; [33.00%]

  <bb 7> [local count: 27435746]:
  _9 = gtk_widget_get_ancestor (focus_58, __t_219);
  if (_9 != 0B)
    goto <bb 5>; [70.00%]
  else
    goto <bb 11>; [30.00%]

  <bb 8> [local count: 371694277]:
  pretmp_199 = event_69(D)->keyval;
  goto <bb 13>; [100.00%]

  <bb 9> [local count: 371694276]:
  _10 = gimp_log_flags;
  _11 = _10 & 16384;
  if (_11 != 0)
    goto <bb 10>; [33.00%]
  else
    goto <bb 36>; [67.00%]

  <bb 10> [local count: 122659111]:
  gimp_log (16384, &__func__, 193, "handled by
gtk_window_propagate_key_event(text_widget)");
  goto <bb 36>; [100.00%]

  <bb 11> [local count: 330353271]:
  _12 = val;
  _13 = _12 << 8;
  _14 = event_69(D)->keyval;
  _15 = _14 & 255;
  _16 = _13 | _15;
  val = _16;
  _17 = _16 % 141650939;
  if (_17 == 62515060)
    goto <bb 12>; [20.24%]
  else
    goto <bb 13>; [79.76%]

  <bb 12> [local count: 66863502]:
  gimp_lebl_dialog ();
  pretmp_191 = event_69(D)->keyval;

  <bb 13> [local count: 702047548]:
  # prephitmp_189 = PHI <pretmp_199(8), pretmp_191(12), _14(11)>
  if (prephitmp_189 == 65307)
    goto <bb 14>; [34.00%]
  else
    goto <bb 35>; [66.00%]

  <bb 14> [local count: 238696166]:
  _19 = gimp_window_54->private;
  _20 = _19->primary_focus_widget;
  if (_20 != 0B)
    goto <bb 15>; [54.59%]
  else
    goto <bb 35>; [45.41%]

  <bb 15> [local count: 130304237]:
  if (_20 != focus_58)
    goto <bb 16>; [70.00%]
  else
    goto <bb 17>; [30.00%]

  <bb 16> [local count: 91212966]:
  gtk_widget_grab_focus (_20);
  goto <bb 33>; [100.00%]

  <bb 17> [local count: 39091271]:
  gtk_widget_error_bell (widget_52(D));
  goto <bb 33>; [100.00%]

  <bb 18> [local count: 188675290]:
  _187 = gtk_window_get_mnemonic_modifier (window_56);
  accel_mods_186 = _187 | accel_mods_203;
  goto <bb 20>; [100.00%]

  <bb 19> [local count: 122659114]:
  gtk_window_get_mnemonic_modifier (window_56);
  goto <bb 33>; [100.00%]

  <bb 20> [local count: 471718793]:
  # accel_mods_218 = PHI <accel_mods_186(18), accel_mods_203(35)>
  _23 = event_69(D)->state;
  _24 = _23 & accel_mods_218;
  if (_24 != 0)
    goto <bb 21>; [33.00%]
  else
    goto <bb 24>; [67.00%]

  <bb 21> [local count: 155667202]:
  handled_86 = gtk_window_activate_key (window_56, event_69(D));
  if (handled_86 != 0)
    goto <bb 22>; [50.00%]
  else
    goto <bb 24>; [50.00%]

  <bb 22> [local count: 77833601]:
  _25 = gimp_log_flags;
  _26 = _25 & 16384;
  if (_26 != 0)
    goto <bb 23>; [33.00%]
  else
    goto <bb 33>; [67.00%]

  <bb 23> [local count: 25685088]:
  gimp_log (16384, &__func__, 233, "handled by
gtk_window_activate_key(modified)");
  goto <bb 33>; [100.00%]

  <bb 24> [local count: 393885193]:
  handled_89 = gtk_window_propagate_key_event (window_56, event_69(D));
  if (handled_89 != 0)
    goto <bb 25>; [50.00%]
  else
    goto <bb 34>; [50.00%]

  <bb 25> [local count: 155667202]:
  _27 = gimp_log_flags;
  _28 = _27 & 16384;
  if (_28 != 0)
    goto <bb 26>; [33.00%]
  else
    goto <bb 33>; [67.00%]

  <bb 26> [local count: 51370177]:
  gimp_log (16384, &__func__, 243, "handled by
gtk_window_propagate_key_event(other_widget)");
  goto <bb 33>; [100.00%]

  <bb 27> [local count: 155667202]:
  handled_92 = gtk_window_activate_key (window_56, event_69(D));
  if (handled_92 != 0)
    goto <bb 28>; [50.00%]
  else
    goto <bb 30>; [50.00%]

  <bb 28> [local count: 77833601]:
  _31 = gimp_log_flags;
  _32 = _31 & 16384;
  if (_32 != 0)
    goto <bb 29>; [33.00%]
  else
    goto <bb 33>; [67.00%]

  <bb 29> [local count: 25685088]:
  gimp_log (16384, &__func__, 253, "handled by
gtk_window_activate_key(unmodified)");
  goto <bb 33>; [100.00%]

  <bb 30> [local count: 393885193]:
  _33 = g_type_parent (_2);
  widget_class_96 = g_type_class_peek_static (_33);
  _34 = widget_class_96->key_press_event;
  handled_98 = _34 (widget_52(D), event_69(D));
  if (handled_98 != 0)
    goto <bb 31>; [50.00%]
  else
    goto <bb 33>; [50.00%]

  <bb 31> [local count: 155667202]:
  _35 = gimp_log_flags;
  _36 = _35 & 16384;
  if (_36 != 0)
    goto <bb 32>; [33.00%]
  else
    goto <bb 33>; [67.00%]

  <bb 32> [local count: 51370177]:
  gimp_log (16384, &__func__, 267, "handled by
widget_class->key_press_event()");

  <bb 33> [local count: 1073741825]:
  # _41 = PHI <1(17), 1(16), handled_92(29), handled_86(22), handled_98(32),
handled_92(28), handled_86(23), handled_89(26), handled_89(25), handled_71(19),
handled_98(30), handled_98(31), handled_71(36)>
  enable_mnemonics ={v} {CLOBBER};
  return _41;

  <bb 34> [local count: 471718793]:
  _29 = event_69(D)->state;
  _30 = _29 & accel_mods_218;
  if (_30 == 0)
    goto <bb 27>; [33.00%]
  else
    goto <bb 30>; [67.00%]

  <bb 35> [local count: 571743307]:
  accel_mods_203 = gtk_widget_get_modifier_mask (widget_52(D), 0);
  _205 = gtk_widget_get_settings (widget_52(D));
  g_object_get (_205, "gtk-enable-mnemonics", &enable_mnemonics, 0B);
  _207 = enable_mnemonics;
  if (_207 != 0)
    goto <bb 18>; [33.00%]
  else
    goto <bb 20>; [67.00%]

  <bb 36> [local count: 371694277]:
  gtk_widget_get_modifier_mask (widget_52(D), 0);
  _195 = gtk_widget_get_settings (widget_52(D));
  g_object_get (_195, "gtk-enable-mnemonics", &enable_mnemonics, 0B);
  _197 = enable_mnemonics;
  if (_197 != 0)
    goto <bb 19>; [33.00%]
  else
    goto <bb 33>; [67.00%]

  <bb 37> [local count: 76374065]:
  __t_210 = gimp_canvas_get_type ();
  if (_4 == __t_210)
    goto <bb 5>; [34.00%]
  else
    goto <bb 6>; [66.00%]

  <bb 38> [local count: 132301528]:
  __r_211 = g_type_check_instance_is_a (focus_58, __t_214);
  if (__r_211 != 0)
    goto <bb 5>; [42.27%]
  else
    goto <bb 37>; [57.73%]

  <bb 39> [local count: 32731741]:
  __t_212 = gimp_canvas_get_type ();
  goto <bb 6>; [100.00%]

  <bb 40> [local count: 200456862]:
  __t_214 = gtk_text_view_get_type ();
  if (_4 == __t_214)
    goto <bb 5>; [34.00%]
  else
    goto <bb 38>; [66.00%]

  <bb 41> [local count: 347248104]:
  __r_215 = g_type_check_instance_is_a (focus_58, __t_59);
  if (__r_215 != 0)
    goto <bb 5>; [42.27%]
  else
    goto <bb 40>; [57.73%]

  <bb 42> [local count: 85910083]:
  __t_216 = gtk_text_view_get_type ();
  __r_213 = g_type_check_instance_is_a (focus_58, __t_216);
  if (__r_213 != 0)
    goto <bb 5>; [61.90%]
  else
    goto <bb 39>; [38.10%]

  <bb 43> [local count: 225485781]:
  __r_217 = g_type_check_instance_is_a (focus_58, __t_59);
  if (__r_217 != 0)
    goto <bb 5>; [61.90%]
  else
    goto <bb 42>; [38.10%]

}

Is it related to fact that the function is void and does not return?


More information about the Gcc-bugs mailing list