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.