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

            Bug ID: 86718
           Summary: ICE during RTL pass: expand
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: zhonghao at pku dot org.cn
  Target Milestone: ---

The code is as follow:

void __attribute__((noinline, noclone))
test(char *data, __SIZE_TYPE__ len)
{
 static char const appended[] = "/./";
 char *buf = __builtin_alloca (len + sizeof appended);
 __builtin_memcpy (buf, data, len);
 __builtin_strcpy (buf + len, &appended[data[len - 1] == '/']);
 if (__builtin_strcmp(buf, "test1234/./"))
 __builtin_abort();
}

int
main()
{
 char *arg = "test1234/";
 test(arg, __builtin_strlen(arg));
 return 0;
}

The error messages are as follows:

gcc code5.c 
during RTL pass: expand
code5.c: In function 'test':
code5.c:7:2: internal compiler error: tree check: expected integer_cst, have
minus_expr in get_len, at tree.h:5553
  __builtin_strcpy (buf + len, &appended[data[len - 1] == '/']);
  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0x717120 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc9.0/gcc/tree.c:9351
0x6226ea tree_check(tree_node const*, char const*, int, char const*, tree_code)
        ../../gcc9.0/gcc/tree.h:3373
0x6226ea wi::extended_tree<192>::get_len() const
        ../../gcc9.0/gcc/tree.h:5553
0x6226ea wi::int_traits<generic_wide_int<wi::extended_tree<192> >
>::decompose(long*, unsigned int, generic_wide_int<wi::extended_tree<192> >
const&)
        ../../gcc9.0/gcc/wide-int.h:961
0x6226ea wide_int_ref_storage<true,
false>::wide_int_ref_storage<generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&, unsigned int)
        ../../gcc9.0/gcc/wide-int.h:1010
0x6226ea generic_wide_int<wide_int_ref_storage<true, false>
>::generic_wide_int<generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&, unsigned int)
        ../../gcc9.0/gcc/wide-int.h:785
0x6226ea bool wi::lts_p<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&,
generic_wide_int<wi::extended_tree<192> > const&)
        ../../gcc9.0/gcc/wide-int.h:1877
0x6226ea wi::binary_traits<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >,
wi::int_traits<generic_wide_int<wi::extended_tree<192> > >::precision_type,
wi::int_traits<generic_wide_int<wi::extended_tree<192> >
>::precision_type>::signed_predicate_result operator<
<generic_wide_int<wi::extended_tree<192> >,
generic_wide_int<wi::extended_tree<192> >
>(generic_wide_int<wi::extended_tree<192> > const&,
generic_wide_int<wi::extended_tree<192> > const&)
        ../../gcc9.0/gcc/wide-int.h:3224
0x6226ea tree_int_cst_lt(tree_node const*, tree_node const*)
        ../../gcc9.0/gcc/tree.h:5709
0x6226ea check_access
        ../../gcc9.0/gcc/builtins.c:3199
0x8ac3fd expand_builtin_strcpy
        ../../gcc9.0/gcc/builtins.c:3816
0x8ac3fd expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int)
        ../../gcc9.0/gcc/builtins.c:7220
0x9cfe15 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
        ../../gcc9.0/gcc/expr.c:10911
0x8cb478 expand_expr
        ../../gcc9.0/gcc/expr.h:279
0x8cb478 expand_call_stmt
        ../../gcc9.0/gcc/cfgexpand.c:2687
0x8cb478 expand_gimple_stmt_1
        ../../gcc9.0/gcc/cfgexpand.c:3575
0x8cb478 expand_gimple_stmt
        ../../gcc9.0/gcc/cfgexpand.c:3734
0x8cc40f expand_gimple_basic_block
        ../../gcc9.0/gcc/cfgexpand.c:5769
0x8d0ff7 execute
        ../../gcc9.0/gcc/cfgexpand.c:6372
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.

Reply via email to