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

            Bug ID: 127781
           Summary: [17 Regression] ICE in dom_oracle::nearest_relations
                    at -O3
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: thiago at kde dot org
  Target Milestone: ---

Commit tested: fb8a2387e35a92e5339df5f7dd434ad14f043d09

Testcase:
typedef struct { long size; const short *data; } SV;
long findString(SV h, long from, SV n);

static inline int checkSV(const SV *p)
{
    long k = 0;
    for (long i = 0; i < p->size; ++i)
        k += p->data[i] != 0;
    return k == p->size && p->size < 100;
}

static inline long indexOf(const SV *h, SV n, long from)
{
    if (!checkSV(&n))
        __builtin_unreachable();
    if (!(from >= 0 && from <= h->size + 2))
        __builtin_unreachable();
    return findString(*h, from, n);
}

int scanForToken(const SV *h, SV sought)
{
    if (!checkSV(&sought))
        __builtin_unreachable();
    long n = sought.size;
    if (!(n > 0))
        __builtin_unreachable();
    long idx = -n;
    int count = 0;
    while ((idx = indexOf(h, sought, idx + n)) >= 0)
        ++count;
    return count;
}

int scanForSigns(const SV *h)
{
    static const short minus[] = { 0x2212 };
    static const short pair[] = { '-', '4' };
    static const short hyph[] = { '-' };
    const SV list[] = { { 1, minus }, { 2, pair }, { 1, hyph } };
    int r = 0;
    for (int i = 0; i < 3; ++i)
        r = r * 10 + scanForToken(h, list[i]);
    return r;
}


Compile with -O3. Backtrace:
during GIMPLE pass: vrp
vrp-relation-ice.c: In function ‘scanForSigns’:
vrp-relation-ice.c:36:5: internal compiler error: Segmentation fault
   36 | int scanForSigns(const SV *h)
      |     ^~~~~~~~~~~~
0x2a63d5f internal_error(char const*, ...)
        /home/tjmaciei/src/gcc/gcc/diagnostic-global-context.cc:787
0x12d148f crash_signal
        /home/tjmaciei/src/gcc/gcc/toplev.cc:325
0x1707580 dom_oracle::nearest_relations(tree_node*, basic_block_def*)
        /home/tjmaciei/src/gcc/gcc/value-relation.cc:1831
0x1707580 dom_oracle::expand_frontier(dom_oracle::frontier_element,
basic_block_def*, relation_kind_t&)
        /home/tjmaciei/src/gcc/gcc/value-relation.cc:1968
0x170a62c dom_oracle::relation_search(basic_block_def*, tree_node*, bitmap_head
const*, tree_node*, bitmap_head const*)
        /home/tjmaciei/src/gcc/gcc/value-relation.cc:2063
0x170a996 dom_oracle::query(basic_block_def*, tree_node*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/value-relation.cc:2131
0xece148 fur_stmt::query_relation(tree_node*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range-fold.cc:164
0xece148 fold_using_range::range_of_range_op(vrange&, gimple_range_op_handler&,
fur_source&)
        /home/tjmaciei/src/gcc/gcc/gimple-range-fold.cc:841
0xecfba2 fold_using_range::fold_stmt(vrange&, gimple*, fur_source&, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range-fold.cc:706
0xeb89a2 gimple_ranger::fold_range_internal(vrange&, gimple*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:303
0xeb89a2 gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:367
0xebb6e1 gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:319
0xebb6e1 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:186
0xebbaf8 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:173
0xebbaf8 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*)
        /home/tjmaciei/src/gcc/gcc/gimple-range.cc:158
0x168c0e1 remove_unreachable::remove_and_update_globals()
        /home/tjmaciei/src/gcc/gcc/tree-vrp.cc:384
0x168d6dd remove_unreachable::remove_and_update_globals()
        /home/tjmaciei/src/gcc/gcc/tree-vrp.cc:317
0x168d6dd execute_ranger_vrp(function*, bool)
        /home/tjmaciei/src/gcc/gcc/tree-vrp.cc:1091
/home/tjmaciei/dev/gcc/libexec/gcc/x86_64-pc-linux-gnu/17.0.0/cc1
-fpreprocessed vrp-relation-ice.i -quiet -dumpbase vrp-relation-ice.c
-dumpbase-ext .c -mtune=generic -march=x86-64 -O3 -o vrp-relation-ice.s
Please submit a full bug report, with preprocessed source (by using
-freport-bug).
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Reply via email to