https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78586
Bug ID: 78586 Summary: Wrong code caused by printf-return-value Product: gcc Version: unknown Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org Target Milestone: --- $ cat /tmp/chunk.c #include <stdio.h> #include <assert.h> void test_no_overflow_long_body (size_t length) { char buf1[3000]; size_t buf1len = sprintf(buf1, "%lu", (unsigned long)length); fprintf (stderr, "buf1: %s\n", buf1); fprintf (stderr, "buf1len: %d\n", buf1len); assert (buf1len == 4); } int main() { test_no_overflow_long_body(1000); } $ gcc -O2 /tmp/chunk.c && ./a.out buf1: 1000 buf1len: 1 a.out: /tmp/chunk.c:13: test_no_overflow_long_body: Assertion `buf1len == 4' failed. Aborted (core dumped)