https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85139
Bug ID: 85139 Summary: Spurious format truncation warning Product: gcc Version: 8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: raj.khem at gmail dot com Target Milestone: --- This test case ================================== #include <stdio.h> #include <stdlib.h> extern const char *modalias_usb(const char *p, const char *v); char s[16]; const char *modalias_usb(const char *p, const char *v) { int vn, pn; vn = strtol(v, NULL, 16); if (vn <= 0) return NULL; pn = strtol(p, NULL, 16); if (pn <= 0) return NULL; snprintf(s, sizeof(s), "usb:v%04Xp%04X*", vn, pn); return s; } ======================================== Results in a format truncation warning oe-workdir/recipe-sysroot-native/usr/bin/aarch64-bec-linux/aarch64-bec-linux-gcc --sysroot=/mnt/a/zonit/build/tmp/work/aarch64-bec-linux/systemd/1_237-r0/recipe-sysroot -Wformat -O a.c -c -Werror a.c: In function 'modalias_usb': a.c:17:43: error: '%04X' directive output may be truncated writing between 4 and 8 bytes into a region of size between 2 and 6 [-Werror=format-truncation=] snprintf(s, sizeof(s), "usb:v%04Xp%04X*", vn, pn); ^~~~ a.c:17:32: note: directive argument in the range [1, 2147483647] snprintf(s, sizeof(s), "usb:v%04Xp%04X*", vn, pn); ^~~~~~~~~~~~~~~~~ a.c:17:9: note: 'snprintf' output between 16 and 24 bytes into a destination of size 16 snprintf(s, sizeof(s), "usb:v%04Xp%04X*", vn, pn); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cc1: all warnings being treated as errors This works fine with gcc7