aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-01-31 13:07:53 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-01-31 13:07:53 +0000
commit957a25ab0c76a2beb268aad005804da41e136c37 (patch)
treed442cd53b63f1845e4293e36ab75ae5536aa9c27 /gcc
parent8ede319fa972ea06c54fe90deb88334b94401bcb (diff)
downloadgcc-957a25ab0c76a2beb268aad005804da41e136c37.zip
gcc-957a25ab0c76a2beb268aad005804da41e136c37.tar.gz
gcc-957a25ab0c76a2beb268aad005804da41e136c37.tar.bz2
re PR tree-optimization/84132 (tree-data-ref.c:3938: poor coding ?)
2018-01-31 Richard Biener <rguenther@suse.de> PR tree-optimization/84132 * tree-data-ref.c (analyze_miv_subscript): Properly check whether evolution_function_is_affine_multivariate_p before calling gcd_of_steps_may_divide_p. * g++.dg/torture/pr84132.C: New testcase. From-SVN: r257232
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr84132.C17
-rw-r--r--gcc/tree-data-ref.c5
4 files changed, 31 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8368986..b1e0891 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-01-31 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/84132
+ * tree-data-ref.c (analyze_miv_subscript): Properly
+ check whether evolution_function_is_affine_multivariate_p
+ before calling gcd_of_steps_may_divide_p.
+
2018-01-31 Julia Koval <julia.koval@intel.com>
PR target/83618
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index eaa672b..e3f0c5a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-31 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/84132
+ * g++.dg/torture/pr84132.C: New testcase.
+
2018-01-31 Jan Hubicka <hubicka@ucw.cz>
* g++.dg/torture/pr81360.C: Drop unintended -O2 from dg-options and
diff --git a/gcc/testsuite/g++.dg/torture/pr84132.C b/gcc/testsuite/g++.dg/torture/pr84132.C
new file mode 100644
index 0000000..205b8f6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr84132.C
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+struct g {
+ char b;
+ unsigned char *d[];
+} e;
+unsigned char f;
+void i()
+{
+ for (int h;; h++)
+ {
+ unsigned a = h;
+ for (int c = 0; c < 256; c += 6)
+ for (int h = c; h < c + 6; h++)
+ e.d[h + a] = &f;
+ }
+}
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index e39067d..0b6ad5f 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -3976,9 +3976,8 @@ analyze_miv_subscript (tree chrec_a,
}
else if (evolution_function_is_constant_p (difference)
- /* For the moment, the following is verified:
- evolution_function_is_affine_multivariate_p (chrec_a,
- loop_nest->num) */
+ && evolution_function_is_affine_multivariate_p (chrec_a,
+ loop_nest->num)
&& !gcd_of_steps_may_divide_p (chrec_a, difference))
{
/* testsuite/.../ssa-chrec-33.c