https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89957
Bug ID: 89957 Summary: ICE calling strnlen with an int128_t bound in a known range Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: msebor at gcc dot gnu.org Target Milestone: --- $ cat z.c && gcc -c -O2 -Wall z.c typedef __SIZE_TYPE__ size_t; extern size_t strnlen (); size_t foo (__int128_t n) { if (n < 0) n = 0; return strnlen ("", n); } z.c: In function ‘foo’: z.c:9:23: warning: ‘strnlen’ argument 2 type is ‘__int128’ where ‘long unsigned int’ is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch] 9 | return strnlen ("", n); | ^ z.c:3:15: note: built-in ‘strnlen’ declared here 3 | extern size_t strnlen (); | ^~~~~~~ during RTL pass: expand z.c:9:10: internal compiler error: in decompose, at wide-int.h:963 9 | return strnlen ("", n); | ^~~~~~~~~~~~~~~ 0x877bc0 wi::int_traits<generic_wide_int<wide_int_storage> >::decompose(long*, unsigned int, generic_wide_int<wide_int_storage> const&) /src/gcc/svn/gcc/wide-int.h:963 0x95f62a wide_int_ref_storage<true, false>::wide_int_ref_storage<generic_wide_int<wide_int_storage> >(generic_wide_int<wide_int_storage> const&, unsigned int) /src/gcc/svn/gcc/wide-int.h:1013 0x95f5f6 generic_wide_int<wide_int_ref_storage<true, false> >::generic_wide_int<generic_wide_int<wide_int_storage> >(generic_wide_int<wide_int_storage> const&, unsigned int) /src/gcc/svn/gcc/wide-int.h:788 0x9e15df bool wi::ltu_p<generic_wide_int<wide_int_ref_storage<false, false> >, generic_wide_int<wide_int_storage> >(generic_wide_int<wide_int_ref_storage<false, false> > const&, generic_wide_int<wide_int_storage> const&) /src/gcc/svn/gcc/wide-int.h:1913 0x9c2fea expand_builtin_strnlen /src/gcc/svn/gcc/builtins.c:3154 0x9d22c9 expand_builtin(tree_node*, rtx_def*, rtx_def*, machine_mode, int) /src/gcc/svn/gcc/builtins.c:7533 0xbfc03c expand_expr_real_1(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) /src/gcc/svn/gcc/expr.c:11029 0xbee2c3 expand_expr_real(tree_node*, rtx_def*, machine_mode, expand_modifier, rtx_def**, bool) /src/gcc/svn/gcc/expr.c:8274 0xbe310a store_expr(tree_node*, rtx_def*, int, bool, bool) /src/gcc/svn/gcc/expr.c:5673 0xbe143a expand_assignment(tree_node*, tree_node*, bool) /src/gcc/svn/gcc/expr.c:5436 0xa1ece5 expand_call_stmt /src/gcc/svn/gcc/cfgexpand.c:2722 0xa226b3 expand_gimple_stmt_1 /src/gcc/svn/gcc/cfgexpand.c:3691 0xa22d6e expand_gimple_stmt /src/gcc/svn/gcc/cfgexpand.c:3850 0xa22e86 expand_gimple_tailcall /src/gcc/svn/gcc/cfgexpand.c:3897 0xa2b406 expand_gimple_basic_block /src/gcc/svn/gcc/cfgexpand.c:5863 0xa2d224 execute /src/gcc/svn/gcc/cfgexpand.c:6509 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.