]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR tree-optimization/79691 - -Wformat-truncation suppressed by (and only by) -Og
authorMartin Sebor <msebor@redhat.com>
Tue, 28 Feb 2017 16:59:16 +0000 (16:59 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Tue, 28 Feb 2017 16:59:16 +0000 (09:59 -0700)
gcc/ChangeLog:

PR tree-optimization/79691
* passes.def (pass_all_optimizations_g): Enable pass_sprintf_length.

gcc/testsuite/ChangeLog:

PR tree-optimization/79691
* gcc.dg/tree-ssa/pr79691.c: New test.

From-SVN: r245782

gcc/ChangeLog
gcc/passes.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/tree-ssa/pr79691.c [new file with mode: 0644]

index 135f1f6a429918fe0a031c57670db11e90cf8aae..3c6dbf414d2b0cc751fad4763f7e2eae5c355a11 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-28  Martin Sebor  <msebor@redhat.com>
+
+       PR tree-optimization/79691
+       * passes.def (pass_all_optimizations_g): Enable pass_sprintf_length.
+
 2017-02-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/79729
index c09ec220d705e0ad72ecd6bf5e3d67214d73008b..6b0f05b07bdd063ed900c5d1a5e75bf5b758d494 100644 (file)
@@ -364,6 +364,7 @@ along with GCC; see the file COPYING3.  If not see
       NEXT_PASS (pass_object_sizes);
       /* Fold remaining builtins.  */
       NEXT_PASS (pass_fold_builtins);
+      NEXT_PASS (pass_sprintf_length, true);
       /* Copy propagation also copy-propagates constants, this is necessary
          to forward object-size and builtin folding results properly.  */
       NEXT_PASS (pass_copy_prop);
index dec6d0d6c664d71eb6f1eb974bbad1d67d106bd2..3e14d498f6d8c62859d0251e04a81e6046e0642d 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-28  Martin Sebor  <msebor@redhat.com>
+
+       PR tree-optimization/79691
+       * gcc.dg/tree-ssa/pr79691.c: New test.
+
 2017-02-28  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/79729
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
new file mode 100644 (file)
index 0000000..cef1ef1
--- /dev/null
@@ -0,0 +1,37 @@
+/* PR tree-optimization/79691 - -Wformat-truncation suppressed by
+   (and only by) -Og
+
+   { dg-compile }
+   { dg-options "-Og -Wall -fdump-tree-optimized" } */
+
+char d[2];
+
+/* Verify -Wformat-overflow works.  */
+void f1 (void)
+{
+  __builtin_sprintf (d, "%i", 123);   /* { dg-warning "directive writing 3 bytes" } */
+}
+
+/* Verify -Wformat-truncation works.  */
+void f2 (void)
+{
+  __builtin_snprintf (d, sizeof d, "%i", 1234);   /* { dg-warning "output truncated writing 4 bytes" } */
+}
+
+/* Verify -fprintf-return-value works.  */
+int f3 (void)
+{
+  return __builtin_snprintf (0, 0, "%i", 12345);
+}
+
+/* Verify -fprintf-return-value results used for constant propagation.  */
+int f4 (int i)
+{
+  int n1 = __builtin_snprintf (0, 0, "%i", 1234);
+  int n2 = __builtin_snprintf (0, 0, "%i", 12345);
+  return n1 + n2;
+}
+
+/* { dg-final { scan-tree-dump-times "sprintf" 1 "optimized" } }
+   { dg-final { scan-tree-dump-times "snprintf" 1 "optimized" } }
+   { dg-final { scan-tree-dump " = 9;" "optimized" } } */