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

            Bug ID: 95297
           Summary: ICE: Segmentation fault
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vsevolod.livinskij at frtk dot ru
  Target Milestone: ---

Error:
>g++ -c func.c -O3
during GIMPLE pass: slp
func.cpp: In function ‘void test()’:
func.cpp:7:6: internal compiler error: Segmentation fault
    7 | void test() {
      |      ^~~~
0x10f44e3 crash_signal
        gcc/gcc_src/gcc/toplev.c:328
0xde7f80 useless_type_conversion_p(tree_node*, tree_node*)
        gcc/gcc_src/gcc/gimple-expr.c:71
0x134427f types_compatible_p
        gcc/gcc_src/gcc/gimple-expr.h:67
0x134427f vect_maybe_update_slp_op_vectype(_slp_tree*, tree_node*)
        gcc/gcc_src/gcc/tree-vect-stmts.c:11854
0x135236f vect_maybe_update_slp_op_vectype(_slp_tree*, tree_node*)
        gcc/gcc_src/gcc/tree-vect-stmts.c:11851
0x135236f vectorizable_shift
        gcc/gcc_src/gcc/tree-vect-stmts.c:5777
0x13684c3 vect_analyze_stmt(vec_info*, _stmt_vec_info*, bool*, _slp_tree*,
_slp_instance*, vec<stmt_info_for_cost, va_heap, vl_ptr>*)
        gcc/gcc_src/gcc/tree-vect-stmts.c:11086
0x139a5e9 vect_slp_analyze_node_operations_1
        gcc/gcc_src/gcc/tree-vect-slp.c:2677
0x139a5e9 vect_slp_analyze_node_operations
        gcc/gcc_src/gcc/tree-vect-slp.c:2844
0x139a50b vect_slp_analyze_node_operations
        gcc/gcc_src/gcc/tree-vect-slp.c:2802
0x139b34b vect_slp_analyze_operations(vec_info*)
        gcc/gcc_src/gcc/tree-vect-slp.c:2898
0x139d443 vect_slp_analyze_bb_1
        gcc/gcc_src/gcc/tree-vect-slp.c:3225
0x139d443 vect_slp_bb_region
        gcc/gcc_src/gcc/tree-vect-slp.c:3286
0x139d443 vect_slp_bb(basic_block_def*)
        gcc/gcc_src/gcc/tree-vect-slp.c:3421
0x139ebc7 execute
        gcc/gcc_src/gcc/tree-vectorizer.c:1320

Reproducer:
#include <algorithm>

extern bool var_10;
extern int var_16;
extern short var_17;
extern long var_18;
extern int arr_3[][13];

void test() {
  for (short a = 0; a < 010; a++)
    for (char b = 0; b < 012; b++)
      arr_3[a][b] = std::min(-var_10, 0) + 2147483647 >> var_10;
  var_16 = (bool)4;
  var_17 = 0;
  var_18 = -1594153176;
}

GCC version:
11.0.0 (a57aa11191617754c8d43b3eb6a2576e970a0668)

Reply via email to