https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117780
Bug ID: 117780 Summary: -fsanitize=undefined -O1 false positive ‘%s’ directive argument is null [-Wformat-truncation=] Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: sanitizer Assignee: unassigned at gcc dot gnu.org Reporter: yansendao at 126 dot com CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org, jakub at gcc dot gnu.org, kcc at gcc dot gnu.org Target Milestone: --- Created attachment 59703 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=59703&action=edit testcase > gcc -Wno-unused-function -Wall -c -fsanitize=undefined -O1 > ~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c /home/yansendao/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c: In function ‘az’: /home/yansendao/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c:12:21: warning: ‘%s’ directive argument is null [-Wformat-truncation=] 12 | snprintf(&aj, an, am, c); | ^~ > cat ~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c //gcc -Wno-unused-function -Wall -c -fsanitize=undefined -O1 ~/compiler-test/openjdk/patchs/asan/java-format-truncation-creduce.c char aj; int snprintf(char *, unsigned long, const char *, ...); unsigned long strlen(const char *); void a(); char *b(); void az() { char *c, *al = 0; static const char am[] = "Djava.class.path=%s"; c = b(); long an = strlen(c); snprintf(&aj, an, am, c); if (c != al) a(); }