https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94642
Bug ID: 94642 Summary: missing -Wformat-overflow on %f with excessive precision Product: gcc Version: 10.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: --- -Wformat-overflow diagnoses the excessive precision in the first case but it fails to warn for the second case. For reference: ...precision [...] gives the minimum number of digits to appear for the d, i, o, u, x, and X conversions, the number of digits to appear after the decimal-point character for a, A, e, E, f, and F conversions, ... $ cat z.c && gcc -O2 -c -Wall z.c char a[8]; void f (void) { __builtin_sprintf (a, "%9999999999999999.9999999999999999i", 1); } void g (void) { __builtin_sprintf (a, "%9999999999999999.9999999999999999f", 1.0); } z.c: In function ‘f’: z.c:5:26: warning: ‘%9999999999999999.9999999999...’ directive writing 9999999999999999 bytes into a region of size 8 [-Wformat-overflow=] 5 | __builtin_sprintf (a, "%9999999999999999.9999999999999999i", 1); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ z.c:5:3: note: ‘__builtin_sprintf’ output 10000000000000000 bytes into a destination of size 8 5 | __builtin_sprintf (a, "%9999999999999999.9999999999999999i", 1); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~