[gcc(refs/users/marxin/heads/marxin-gcc-benchmark-branch)] tree-optimization/93661 properly guard tree_to_poly_int64

Martin Liska marxin@gcc.gnu.org
Mon Mar 30 10:58:05 GMT 2020


https://gcc.gnu.org/g:9714f1a70d184fb6d282ac543c57734ed1fb39ac

commit 9714f1a70d184fb6d282ac543c57734ed1fb39ac
Author: Richard Biener <rguenther@suse.de>
Date:   Tue Feb 11 10:52:31 2020 +0100

    tree-optimization/93661 properly guard tree_to_poly_int64
    
    2020-02-11  Richard Biener  <rguenther@suse.de>
    
            PR tree-optimization/93661
            PR tree-optimization/93662
            * tree-ssa-sccvn.c (vn_reference_lookup_3): Properly guard
            tree_to_poly_int64.
            * tree-sra.c (get_access_for_expr): Likewise.
    
            * gcc.dg/pr93661.c: New testcase.

Diff:
---
 gcc/ChangeLog           | 8 ++++++++
 gcc/testsuite/ChangeLog | 6 ++++++
 gcc/tree-sra.c          | 6 ++++--
 gcc/tree-ssa-sccvn.c    | 1 +
 4 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f44b6fd9f8..3eafd66f3b4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2020-02-11  Richard Biener  <rguenther@suse.de>
+
+	PR tree-optimization/93661
+	PR tree-optimization/93662
+	* tree-ssa-sccvn.c (vn_reference_lookup_3): Properly guard
+	tree_to_poly_int64.
+	* tree-sra.c (get_access_for_expr): Likewise.
+
 2020-02-10  Jakub Jelinek  <jakub@redhat.com>
 
 	PR target/93637
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 81ebea01c17..1844550b5a2 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-02-11  Richard Biener  <rguenther@suse.de>
+
+	PR tree-optimization/93661
+	PR tree-optimization/93662
+	* gcc.dg/pr93661.c: New testcase.
+
 2020-02-12  Patrick Palka  <ppalka@redhat.com>
 
 	PR c++/69448
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index ea8594db193..f03ad3a586f 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -3605,8 +3605,10 @@ get_access_for_expr (tree expr)
 
   if (tree basesize = DECL_SIZE (base))
     {
-      poly_int64 sz = tree_to_poly_int64 (basesize);
-      if (offset < 0 || known_le (sz, offset))
+      poly_int64 sz;
+      if (offset < 0
+	  || !poly_int_tree_p (basesize, &sz)
+	  || known_le (sz, offset))
 	return NULL;
     }
 
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c
index 2ffbc643669..33cd12b202f 100644
--- a/gcc/tree-ssa-sccvn.c
+++ b/gcc/tree-ssa-sccvn.c
@@ -2504,6 +2504,7 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_,
       /* For now handle clearing memory with partial defs.  */
       else if (known_eq (ref->size, maxsize)
 	       && integer_zerop (gimple_call_arg (def_stmt, 1))
+	       && tree_fits_poly_int64_p (len)
 	       && tree_to_poly_int64 (len).is_constant (&leni)
 	       && offset.is_constant (&offseti)
 	       && offset2.is_constant (&offset2i)


More information about the Gcc-cvs mailing list