From: Martin Sebor Date: Wed, 15 Dec 2021 15:43:02 +0000 (-0700) Subject: Add new test [PR78969]. X-Git-Tag: upstream/12.2.0~2695 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=639ece7abfa3688008cb791aec4c7a1a4f76e59f;p=platform%2Fupstream%2Fgcc.git Add new test [PR78969]. gcc/testsuite/ChangeLog: PR tree-optimization/78969 * gcc.dg/tree-ssa/builtin-snprintf-warn-6.c: New test. --- diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-6.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-6.c new file mode 100644 index 0000000..2857e83 --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-snprintf-warn-6.c @@ -0,0 +1,47 @@ +/* PR tree-optimization/78969 - bogus snprintf truncation warning due to + missing range info + { dg-do compile } + { dg-options "-O2 -Wall -Wformat-truncation=2" } */ + +typedef __SIZE_TYPE__ size_t; + +extern int snprintf (char*, size_t, const char*, ...); + + +void f (unsigned j, char *p) +{ + if (j > 999) + j = 0; + + snprintf (p, 4, "%3u", j); +} + +void g (unsigned j, char *p) +{ + if (j > 999) + return; + + snprintf (p, 4, "%3u", j); // { dg-bogus "-Wformat-truncation" } +} + + +void pr78969_c4 (char * p /* NNN\0" */) +{ + for (int idx = 0; idx < 1000; idx++) { + // guaranteed to be in [0-999] range + snprintf (p, 4, "%d", idx); // { dg-bogus "-Wformat-truncation" } + } +} + + +void sink (int, ...); + +char d[4]; + +void pr78969_c12 (unsigned i) +{ + if (i >= 1000 && i < 10000) + snprintf (d, 4, "%3d", i / 10); // { dg-bogus "-Wformat-truncation" } + else + sink (i / 10 % 10); +}