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.