aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2018-02-20 11:52:07 -0700
committerJeff Law <law@gcc.gnu.org>2018-02-20 11:52:07 -0700
commitaa67d03c30f907fd47adfadff3fb7c58c0b437d1 (patch)
tree6272d72d919142c308a094654059224031a33978 /gcc
parent2db63ab20cdbd39e2ef83e41f34bb4ef8bcfb337 (diff)
downloadgcc-aa67d03c30f907fd47adfadff3fb7c58c0b437d1.zip
gcc-aa67d03c30f907fd47adfadff3fb7c58c0b437d1.tar.gz
gcc-aa67d03c30f907fd47adfadff3fb7c58c0b437d1.tar.bz2
re PR middle-end/82123 (spurious -Wformat-overflow warning for converted vars)
PR middle-end/82123 PR tree-optimization/81592 PR middle-end/79257 * gimple-ssa-sprintf.c: Include alloc-pool.h, vr-values.h and gimple-ssa-evrp-analyze.h (class sprintf_dom_walker): Add after_dom_children member function. Add evrp_range_analyzer member. (sprintf_dom_walker::before_dom_children): Call into the EVRP range analyzer as needed. (sprintf_dom_walker::after_dom_children): New member function. * gcc.dg/builtin-unreachable-6.c: Turn off VRP. From-SVN: r257852
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/gimple-ssa-sprintf.c17
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.dg/builtin-unreachable-6.c2
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 748be06..bef9eb1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -3,6 +3,13 @@
PR middle-end/82123
PR tree-optimization/81592
PR middle-end/79257
+ * gimple-ssa-sprintf.c: Include alloc-pool.h, vr-values.h and
+ gimple-ssa-evrp-analyze.h
+ (class sprintf_dom_walker): Add after_dom_children member function.
+ Add evrp_range_analyzer member.
+ (sprintf_dom_walker::before_dom_children): Call into the EVRP
+ range analyzer as needed.
+ (sprintf_dom_walker::after_dom_children): New member function.
* gimple-ssa-evrp-analyze.c (evrp_range_analyzer::enter): Do nothing
if not optimizing.
(evrp_range_analyzer::record_ranges_from_stmt): Likewise.
diff --git a/gcc/gimple-ssa-sprintf.c b/gcc/gimple-ssa-sprintf.c
index a2dd545..545f833 100644
--- a/gcc/gimple-ssa-sprintf.c
+++ b/gcc/gimple-ssa-sprintf.c
@@ -80,6 +80,9 @@ along with GCC; see the file COPYING3. If not see
#include "substring-locations.h"
#include "diagnostic.h"
#include "domwalk.h"
+#include "alloc-pool.h"
+#include "vr-values.h"
+#include "gimple-ssa-evrp-analyze.h"
/* The likely worst case value of MB_LEN_MAX for the target, large enough
for UTF-8. Ideally, this would be obtained by a target hook if it were
@@ -121,10 +124,12 @@ class sprintf_dom_walker : public dom_walker
~sprintf_dom_walker () {}
edge before_dom_children (basic_block) FINAL OVERRIDE;
+ void after_dom_children (basic_block) FINAL OVERRIDE;
bool handle_gimple_call (gimple_stmt_iterator *);
struct call_info;
bool compute_format_length (call_info &, format_result *);
+ class evrp_range_analyzer evrp_range_analyzer;
};
class pass_sprintf_length : public gimple_opt_pass
@@ -3456,7 +3461,7 @@ parse_directive (sprintf_dom_walker::call_info &info,
bool
sprintf_dom_walker::compute_format_length (call_info &info,
- format_result *res)
+ format_result *res)
{
if (dump_file)
{
@@ -4012,11 +4017,15 @@ sprintf_dom_walker::handle_gimple_call (gimple_stmt_iterator *gsi)
edge
sprintf_dom_walker::before_dom_children (basic_block bb)
{
+ evrp_range_analyzer.enter (bb);
for (gimple_stmt_iterator si = gsi_start_bb (bb); !gsi_end_p (si); )
{
/* Iterate over statements, looking for function calls. */
gimple *stmt = gsi_stmt (si);
+ /* First record ranges generated by this statement. */
+ evrp_range_analyzer.record_ranges_from_stmt (stmt, false);
+
if (is_gimple_call (stmt) && handle_gimple_call (&si))
/* If handle_gimple_call returns true, the iterator is
already pointing to the next statement. */
@@ -4027,6 +4036,12 @@ sprintf_dom_walker::before_dom_children (basic_block bb)
return NULL;
}
+void
+sprintf_dom_walker::after_dom_children (basic_block bb)
+{
+ evrp_range_analyzer.leave (bb);
+}
+
/* Execute the pass for function FUN. */
unsigned int
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d6cedec..de9cd42 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2018-02-20 Jeff Law <law@redhat.com>
+
+ PR middle-end/82123
+ PR tree-optimization/81592
+ PR middle-end/79257
+ * gcc.dg/builtin-unreachable-6.c: Turn off VRP.
+
2018-02-20 Jakub Jelinek <jakub@redhat.com>
PR c++/84488
diff --git a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
index 1915dd1..b0504be 100644
--- a/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
+++ b/gcc/testsuite/gcc.dg/builtin-unreachable-6.c
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts" } */
+/* { dg-options "-O2 -fdump-tree-fab1 -fno-tree-dominator-opts -fno-tree-vrp" } */
void
foo (int b, int c)