aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2022-01-14 09:59:53 -0700
committerMartin Sebor <msebor@redhat.com>2022-01-14 09:59:53 -0700
commit1e6294bb15d2169147c7838f89a9168980b94b47 (patch)
tree956dbff7068df422f4c92c1cbaf637f375873548 /gcc
parentd82a54f5644ae3db546e596b7bc426c5cb00b7e1 (diff)
downloadgcc-1e6294bb15d2169147c7838f89a9168980b94b47.zip
gcc-1e6294bb15d2169147c7838f89a9168980b94b47.tar.gz
gcc-1e6294bb15d2169147c7838f89a9168980b94b47.tar.bz2
Test to verify -Wformat-overflow uses context-sensitive ranges.
gcc/testsuite/ChangeLog: * gcc.dg/tree-ssa/builtin-sprintf-warn-28.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-28.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-28.c b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-28.c
new file mode 100644
index 0000000..d58d980
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-28.c
@@ -0,0 +1,21 @@
+/* Verify that -Wformat-overflow uses context-sensitive ranges even
+ at -O0 to avoid both false positives and negatives.
+ { dg-do compile }
+ { dg-options "-O0 -Wall" } */
+
+extern int sprintf (char*, const char*, ...);
+
+extern char a[4];
+
+void test_context_range (int c)
+{
+ int i = 998;
+
+ /* Prior to the switch to Ranger in GCC 12 -Wformat-overflow triggers
+ for both calls because EVRP doesn't expose the accurate range of
+ the argument. */
+ if (c)
+ sprintf (a, "%i", i + 2); // { dg-warning "writing a terminating nul past the end of the destination" }
+ else
+ sprintf (a, "%i", i + 1); // { dg-bogus "-Wformat-overflow" }
+}