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

--- Comment #5 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
slightly modified test case blows off at -O0

$ cat t.c
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;
}

$ gcc -O0 t.c
during RTL pass: expand
t.c: In function ‘test’:
t.c:7:5: 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] == '/']);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0x717320 tree_check_failed(tree_node const*, char const*, int, char const*,
...)
        ../../gcc-9-20180715/gcc/tree.c:9351
0x622734 tree_check(tree_node const*, char const*, int, char const*, tree_code)
        ../../gcc-9-20180715/gcc/tree.h:3373
0x622734 wi::extended_tree<192>::get_len() const
        ../../gcc-9-20180715/gcc/tree.h:5553
0x622734 wi::int_traits<generic_wide_int<wi::extended_tree<192> >
>::decompose(long*, unsigned int, generic_wide_int<wi::extended_tree<192> >
const&)
        ../../gcc-9-20180715/gcc/wide-int.h:961
0x622734 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)
        ../../gcc-9-20180715/gcc/wide-int.h:1010
0x622734 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)
        ../../gcc-9-20180715/gcc/wide-int.h:785
0x622734 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&)
        ../../gcc-9-20180715/gcc/wide-int.h:1877
0x622734 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&)
        ../../gcc-9-20180715/gcc/wide-int.h:3224
0x622734 tree_int_cst_lt(tree_node const*, tree_node const*)
        ../../gcc-9-20180715/gcc/tree.h:5709
0x622734 check_access
        ../../gcc-9-20180715/gcc/builtins.c:3199
0x8ac5fd expand_builtin_strcpy
        ../../gcc-9-20180715/gcc/builtins.c:3816
0x8ac5fd expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int)
        ../../gcc-9-20180715/gcc/builtins.c:7220
0x9d0095 expand_expr_real_1(tree_node*, rtx_def*, machine_mode,
expand_modifier, rtx_def**, bool)
        ../../gcc-9-20180715/gcc/expr.c:10911
0x8cb678 expand_expr
        ../../gcc-9-20180715/gcc/expr.h:279
0x8cb678 expand_call_stmt
        ../../gcc-9-20180715/gcc/cfgexpand.c:2687
0x8cb678 expand_gimple_stmt_1
        ../../gcc-9-20180715/gcc/cfgexpand.c:3575
0x8cb678 expand_gimple_stmt
        ../../gcc-9-20180715/gcc/cfgexpand.c:3734
0x8cc60f expand_gimple_basic_block
        ../../gcc-9-20180715/gcc/cfgexpand.c:5769
0x8d11f7 execute
        ../../gcc-9-20180715/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