From 203ced0a773b11b1a364f67cd35b4d69f0438fb5 Mon Sep 17 00:00:00 2001 From: Martin Sebor Date: Tue, 28 Feb 2017 16:59:16 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 ++++ gcc/passes.def | 1 + gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/gcc.dg/tree-ssa/pr79691.c | 37 +++++++++++++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/tree-ssa/pr79691.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 135f1f6a429..3c6dbf414d2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2017-02-28 Martin Sebor + + PR tree-optimization/79691 + * passes.def (pass_all_optimizations_g): Enable pass_sprintf_length. + 2017-02-28 Jakub Jelinek PR target/79729 diff --git a/gcc/passes.def b/gcc/passes.def index c09ec220d70..6b0f05b07bd 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 dec6d0d6c66..3e14d498f6d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-02-28 Martin Sebor + + PR tree-optimization/79691 + * gcc.dg/tree-ssa/pr79691.c: New test. + 2017-02-28 Jakub Jelinek 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 00000000000..cef1ef192ab --- /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" } } */ -- 2.30.2