From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1930) id 710403858D28; Wed, 15 Dec 2021 15:44:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 710403858D28 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Martin Sebor To: gcc-cvs@gcc.gnu.org Subject: [gcc r12-6002] Add new test [PR78969]. X-Act-Checkin: gcc X-Git-Author: Martin Sebor X-Git-Refname: refs/heads/master X-Git-Oldrev: 3e714cc55efe5e402a7db6703dbfd70baa53dfbe X-Git-Newrev: 639ece7abfa3688008cb791aec4c7a1a4f76e59f Message-Id: <20211215154437.710403858D28@sourceware.org> Date: Wed, 15 Dec 2021 15:44:37 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Dec 2021 15:44:37 -0000 https://gcc.gnu.org/g:639ece7abfa3688008cb791aec4c7a1a4f76e59f commit r12-6002-g639ece7abfa3688008cb791aec4c7a1a4f76e59f Author: Martin Sebor Date: Wed Dec 15 08:43:02 2021 -0700 Add new test [PR78969]. gcc/testsuite/ChangeLog: PR tree-optimization/78969 * gcc.dg/tree-ssa/builtin-snprintf-warn-6.c: New test. Diff: --- .../gcc.dg/tree-ssa/builtin-snprintf-warn-6.c | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) 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 00000000000..2857e83369f --- /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); +}