aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Sebor <msebor@redhat.com>2017-02-28 16:59:16 +0000
committerMartin Sebor <msebor@gcc.gnu.org>2017-02-28 09:59:16 -0700
commit203ced0a773b11b1a364f67cd35b4d69f0438fb5 (patch)
tree8b04d5b16abdfae3403d21fddc3784be07515613 /gcc
parent8a915b876abe5c82bb3efd0420ceb8d8f3faf988 (diff)
downloadgcc-203ced0a773b11b1a364f67cd35b4d69f0438fb5.zip
gcc-203ced0a773b11b1a364f67cd35b4d69f0438fb5.tar.gz
gcc-203ced0a773b11b1a364f67cd35b4d69f0438fb5.tar.bz2
PR tree-optimization/79691 - -Wformat-truncation suppressed by (and only by) -Og
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/passes.def1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/pr79691.c37
4 files changed, 48 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 135f1f6..3c6dbf4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/passes.def b/gcc/passes.def
index c09ec22..6b0f05b 100644
--- a/gcc/passes.def
+++ b/gcc/passes.def
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dec6d0d..3e14d49 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..cef1ef1
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa/pr79691.c
@@ -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" } } */