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

            Bug ID: 89703
           Summary: [9 Regression] ICE in compare_values_warnv, at
                    tree-vrp.c:997
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gs...@t-online.de
  Target Milestone: ---

Started with gcc-9 (before 20180429), at -O2+ :


$ cat z1.c
typedef __SIZE_TYPE__ size_t;
extern char* strlen (const char*);
extern char* strnlen (const char*, size_t);
char** q;
void foo ()
{
  extern char c[2];
  q[0] = strlen (c);
  q[1] = strnlen (c, 2);
}


$ gcc-9-20190310 -c z1.c -O1
$
$ gcc-9-20190310 -c z1.c -O2
during GIMPLE pass: vrp
z1.c: In function 'foo':
z1.c:5:6: internal compiler error: in compare_values_warnv, at tree-vrp.c:997
    5 | void foo ()
      |      ^~~
0xcac6cf compare_values_warnv(tree_node*, tree_node*, bool*)
        ../../gcc/tree-vrp.c:996
0xd094be compare_range_with_value
        ../../gcc/vr-values.c:1651
0xd0e136
vr_values::vrp_evaluate_conditional_warnv_with_ops_using_ranges(tree_code,
tree_node*, tree_node*, bool*)
        ../../gcc/vr-values.c:2283
0xd0f814 vr_values::simplify_min_or_max_using_ranges(gimple_stmt_iterator*,
gimple*)
        ../../gcc/vr-values.c:3201
0xd133bd vr_values::simplify_stmt_using_ranges(gimple_stmt_iterator*)
        ../../gcc/vr-values.c:4259
0xbd9d86 substitute_and_fold_dom_walker::before_dom_children(basic_block_def*)
        ../../gcc/tree-ssa-propagate.c:1082
0x117e7f4 dom_walker::walk(basic_block_def*)
        ../../gcc/domwalk.c:353
0xbd9323 substitute_and_fold_engine::substitute_and_fold(basic_block_def*)
        ../../gcc/tree-ssa-propagate.c:1194
0xcab87e vrp_prop::vrp_finalize(bool)
        ../../gcc/tree-vrp.c:6709
0xcb9114 execute_vrp
        ../../gcc/tree-vrp.c:6780


Configured with --enable-checking=yes :

$ gcc-9-20190310 -c z1.c -O2
z1.c: In function 'foo':
z1.c:5:6: error: type mismatch in binary expression
    5 | void foo ()
      |      ^~~
char *

char *

size_t

_3 = MIN_EXPR <_2, 2>;
during GIMPLE pass: strlen
z1.c:5:6: internal compiler error: verify_gimple failed
0xc7b93f verify_gimple_in_cfg(function*, bool)
        ../../gcc/tree-cfg.c:5434
0xb37926 execute_function_todo
        ../../gcc/passes.c:1977
0xb38962 execute_todo
        ../../gcc/passes.c:2031

Reply via email to