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

            Bug ID: 87086
           Summary: [9 Regression] ICE in canonize from wide-int.cc when
                    building SPEC2000 254.gap
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Keywords: ice-on-valid-code
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ktkachov at gcc dot gnu.org
                CC: aldyh at gcc dot gnu.org
  Target Milestone: ---

I'm getting an ICE when building gap from SPEC2000 on aarch64-none-linux-gnu.
The reduced testcase is:

int a, b;
void fn1 () { b == 0 || a / b; }

built with -O2 -fno-strict-overflow. Without -fno-strict-overflow it doesn't
ICE.
The benchmark ICEs in set_value_range, at tree-vrp.c:289
whereas the testcase segfaults with:

0xbf50e5 crash_signal
        $SRC/gcc/toplev.c:325
0xf6a482 canonize
        $SRC/gcc/wide-int.cc:96
0xf6ac38 wi::force_to_size(long*, long const*, unsigned int, unsigned int,
unsigned int, signop)
        $SRC/gcc/wide-int.cc:386
0xefed1d wide_int_storage::from(generic_wide_int<wide_int_ref_storage<false,
true> > const&, unsigned int, signop)
        $SRC/gcc/wide-int.h:1151
0xefed1d wide_int_to_tree_1
        $SRC/gcc/tree.c:1494
0xeff697 wide_int_to_tree(tree_node*, poly_int<2u,
generic_wide_int<wide_int_ref_storage<false, true> > > const&)
        $SRC/gcc/tree.c:1676
0xedefe0 extract_range_from_binary_expr_1(value_range*, tree_code, tree_node*,
value_range*, value_range*)
        $SRC/gcc/tree-vrp.c:1675
0xedd9e2 extract_range_from_binary_expr_1(value_range*, tree_code, tree_node*,
value_range*, value_range*)
        $SRC/gcc/tree-vrp.c:1373
0xf5d110 vr_values::extract_range_from_binary_expr(value_range*, tree_code,
tree_node*, tree_node*, tree_node*)
        $SRC/gcc/vr-values.c:768
0xf6225d vr_values::extract_range_from_assignment(value_range*, gassign*)
        $SRC/gcc/vr-values.c:1432
0xf62438 vr_values::vrp_visit_assignment_or_call(gimple*, tree_node**,
value_range*)
        $SRC/gcc/vr-values.c:2048
0xf624e5 vr_values::extract_range_from_stmt(gimple*, edge_def**, tree_node**,
value_range*)
        $SRC/gcc/vr-values.c:2744
0x138d508 evrp_range_analyzer::record_ranges_from_stmt(gimple*, bool)
        $SRC/gcc/gimple-ssa-evrp-analyze.c:293
0x138b6bf evrp_dom_walker::before_dom_children(basic_block_def*)
        $SRC/gcc/gimple-ssa-evrp.c:139
0x1364517 dom_walker::walk(basic_block_def*)
        $SRC/gcc/domwalk.c:353
0x138c05c execute_early_vrp
        $SRC/gcc/gimple-ssa-evrp.c:310
0x138c05c execute
        $SRC/gcc/gimple-ssa-evrp.c:347
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

This appeared very recently, I believe it's one of the new range work.

Reply via email to