https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83011
Bug ID: 83011 Summary: -Wformat-truncation wrongly computes length (depends on the position of numbers in the addition) Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: julien at trigofacile dot com Target Milestone: --- Hi, Trying to build INN, I encounter the following warning: timer.c: Dans la fonction « TMRsummary »: timer.c:395:37: error: la sortie de la directive « » peut être tronquée en écrivant 1 octet dans une région dont la taille est comprise entre 0 et 1 [-Werror=format-truncation=] rc = snprintf(buf, len, "%s ", prefix); ~ timer.c:395:12: note: « snprintf » écrit 2 octets ou plus (3 supposé) dans une destination dont la taille est 1 rc = snprintf(buf, len, "%s ", prefix); ~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ It happens in: https://inn.eyrie.org/trac/browser/trunk/lib/timer.c len = 52 * timer_count + 27 + (prefix == NULL ? 0 : strlen(prefix)) + 1; buf = xmalloc(len); off = 0; if (prefix == NULL) rc = 0; else rc = snprintf(buf, len, "%s ", prefix); If I rewrite len this way, gcc no longer gives the above warning: len = 1 + 52 * timer_count + 27 + (prefix == NULL ? 0 : strlen(prefix)); Isn't there a computation issue? (depending on the location of components in the addition) Julien