https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80364
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |ice-on-invalid-code Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |msebor at gcc dot gnu.org --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- The get_int_range function is only meant to be used for printf arguments of type int after promotion (width and precision specified by the asterisk, and wint_t argument to %lc). The test case in pr72858.c that triggers the sanitizer error is invalid (with undefined behavior) because it passes in an argument of type long. A test case that passes in a __int128_t triggers an ICE (below). Arguments of non-integer types are ignored. Let me correct the handling to avoid these two problems. $ cat a.c && gcc -O2 -S -Wall -Wextra -Wpedantic a.c void f (__int128_t x) { extern char d[3]; __builtin_sprintf (d, "%*d", x, 1); } a.c: In function ‘f’: a.c:4:27: warning: field width specifier ‘*’ expects argument of type ‘int’, but argument 3 has type ‘__int128’ [-Wformat=] __builtin_sprintf (d, "%*d", x, 1); ~^~ a.c:1:6: internal compiler error: in tree_to_shwi, at tree.c:7333 void f (__int128_t x) ^ 0x10b13cd tree_to_shwi(tree_node const*) /ssd/src/gcc/git-svn/gcc/tree.c:7333 0x16e8692 get_int_range /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:946 0x16e8865 get_int_range /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:995 0x16e7f3d set_width /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:677 0x16ed310 parse_directive /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:3129 0x16ed753 compute_format_length /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:3239 0x16ee60a handle_gimple_call /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:3671 0x16ee70d execute /ssd/src/gcc/git-svn/gcc/gimple-ssa-sprintf.c:3699 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.