builtin-sprintf-warn-1.c: Add test cases.
authorMartin Sebor <msebor@redhat.com>
Sat, 28 Jan 2017 00:09:15 +0000 (00:09 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Sat, 28 Jan 2017 00:09:15 +0000 (17:09 -0700)
gcc/testsuite/ChangeLog:
* gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Add test cases.

From-SVN: r244999

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/builtin-sprintf-warn-1.c

index eb63091bbdaf20cf67725c8f2a735e728ef06547..f4b6aa09a6e0f89d939418afa1ab84c865a6a426 100644 (file)
@@ -1,3 +1,7 @@
+2017-01-27  Martin Sebor  <msebor@redhat.com>
+
+       * gcc.dg/tree-ssa/builtin-sprintf-warn-1.c: Add test cases.
+
 2017-01-27  Bernd Schmidt  <bschmidt@redhat.com>
 
        PR rtl-optimization/79194
index 0f3d423d46e5aa5097a671ba3574f310d5728a12..9955326ed4c6026a8cf2ffe9477276536c7cf9f7 100644 (file)
@@ -76,10 +76,24 @@ int dummy___vsnprintf_chk (char*, size_t, int, size_t, const char*, va_list);
 /* Macro to verify that calls to __builtin_sprintf (i.e., with no size
    argument) issue diagnostics by correctly determining the size of
    the destination buffer.  */
-#define T(size, fmt, ...)                                              \
-  (FUNC (sprintf) (buffer (size), fmt, __VA_ARGS__),                   \
+#define T(size, ...)                                           \
+  (FUNC (sprintf) (buffer (size),  __VA_ARGS__),               \
    sink (buffer, ptr))
 
+/* Exercise the "%%" directive.  */
+
+void test_sprintf_percent (void)
+{
+  T (-1, "%%");
+  T ( 0, "%%");                 /* { dg-warning ".%%. directive writing 1 byte into a region of size 0" } */
+  T ( 1, "%%");                 /* { dg-warning "writing a terminating nul past the end" } */
+  T ( 2, "%%");
+  T ( 2, "%%%%");               /* { dg-warning "writing a terminating nul past the end" } */
+  T ( 3, "%%%%");
+  T ( 3, "%%X%%");              /* { dg-warning "writing a terminating nul past the end" } */
+  T ( 4, "%%X%%");
+}
+
 /* Exercise the "%c" and "%lc" directive with constant arguments.  */
 
 void test_sprintf_c_const (void)