https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87059
Bug ID: 87059
Summary: internal compiler error: in set_value_range, at
tree-vrp.c:289
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: anton at samba dot org
CC: meissner at gcc dot gnu.org, segher at gcc dot gnu.org,
wschmidt at gcc dot gnu.org
Target Milestone: ---
Target: powerpc64le-linux
The following test case:
#include <string.h>
void d(void);
char *a, *b;
void c(void) {
if (b == a)
return;
if (strncmp(a, "", b - a))
d();
}
hits an ICE on trunk:
gcc -O2 test.c
during RTL pass: expand
test.c: In function ācā:
test.c:9:7: internal compiler error: in set_value_range, at tree-vrp.c:289
9 | if (strncmp(a, "", b - a))
| ^~~~~~~~~~~~~~~~~~~~~
0x10d3ceb7 set_value_range(value_range*, value_range_type, tree_node*,
tree_node*, bitmap_head*)
../../gcc/gcc/tree-vrp.c:289
0x10d4106f extract_range_from_binary_expr_1(value_range*, tree_code,
tree_node*, value_range*, value_range*)
../../gcc/gcc/tree-vrp.c:1893
0x10d43a2b determine_value_range_1
../../gcc/gcc/tree-vrp.c:6866
0x10d43cbf determine_value_range(tree_node*,
generic_wide_int<wide_int_storage>*, generic_wide_int<wide_int_storage>*)
../../gcc/gcc/tree-vrp.c:6901
0x1036385b get_size_range(tree_node*, tree_node**, bool)
../../gcc/gcc/calls.c:1258
0x10369c5b maybe_warn_nonstring_arg(tree_node*, tree_node*)
../../gcc/gcc/calls.c:1617
0x1036c003 initialize_argument_information
../../gcc/gcc/calls.c:2197
0x1036d367 expand_call(tree_node*, rtx_def*, int)
../../gcc/gcc/calls.c:3577
0x103454ef expand_builtin_strncmp
../../gcc/gcc/builtins.c:4793
0x10355f5b expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int)
../../gcc/gcc/builtins.c:7445
0x1052816f expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
../../gcc/gcc/expr.c:10943
0x10542cc3 expand_expr
../../gcc/gcc/expr.h:279
0x10542cc3 expand_expr_real_2(separate_ops*, rtx_def*, machine_mode,
expand_modifier)
../../gcc/gcc/expr.c:8456
0x10528703 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
../../gcc/gcc/expr.c:11230
0x1053958f expand_expr
../../gcc/gcc/expr.h:279
0x1053958f store_expr(tree_node*, rtx_def*, int, bool, bool)
../../gcc/gcc/expr.c:5556
0x1053b6a3 expand_assignment(tree_node*, tree_node*, bool)
../../gcc/gcc/expr.c:5420
0x10388133 expand_call_stmt
../../gcc/gcc/cfgexpand.c:2685
0x10388133 expand_gimple_stmt_1
../../gcc/gcc/cfgexpand.c:3575
0x10388133 expand_gimple_stmt
../../gcc/gcc/cfgexpand.c:3734
The CI that tripped up on this started failing at:
commit 9e4ef9eec6c786e3edbdcb7f26a1d735c9d7f4b9
Author: aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue Aug 21 06:27:14 2018 +0000
* wide-int-range.cc (wide_int_range_abs): New.
(wide_int_range_order_set): Rename from wide_int_range_min_max.
* wide-int-range.h (wide_int_range_abs): New.
(wide_int_range_min_max): New.
* tree-vrp.c (extract_range_from_unary_expr): Rewrite ABS_EXPR
case to call wide_int_range_abs.
Rewrite MIN/MAX_EXPR to call wide_int_range_min_max.
(extract_range_from_abs_expr): Delete.