aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2018-04-27 22:32:18 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2018-04-27 22:32:18 +0200
commitcf25444273b4bab2b60e5c3f811883bf2dab2b85 (patch)
tree568ec04f555ee5835d9e4e55339a2b3e49e87a05 /gcc
parentb2b1ea3455979699f172e1601785efa57e3cd3f2 (diff)
downloadgcc-cf25444273b4bab2b60e5c3f811883bf2dab2b85.zip
gcc-cf25444273b4bab2b60e5c3f811883bf2dab2b85.tar.gz
gcc-cf25444273b4bab2b60e5c3f811883bf2dab2b85.tar.bz2
re PR ipa/85549 (Infinite loop in ilmbase package)
PR ipa/85549 * ipa-cp.c (find_aggregate_values_for_callers_subset): Make sure the jump function allows for passing through aggregate values. * g++.dg/ipa/pr85549.C: New test. From-SVN: r259730
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-cp.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/ipa/pr85549.C28
4 files changed, 42 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 048ec0b..8513d2d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-04-27 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/85549
+ * ipa-cp.c (find_aggregate_values_for_callers_subset): Make sure
+ the jump function allows for passing through aggregate values.
+
2018-04-27 David Malcolm <dmalcolm@redhat.com>
* input.h (in_system_header_at): Convert from macro to inline
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 1b8f335..4f28a55 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -4372,7 +4372,9 @@ find_aggregate_values_for_callers_subset (struct cgraph_node *node,
{
struct ipa_jump_func *jfunc
= ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
- if (self_recursive_pass_through_p (cs, jfunc, i))
+ if (self_recursive_pass_through_p (cs, jfunc, i)
+ && (!plats->aggs_by_ref
+ || ipa_get_jf_pass_through_agg_preserved (jfunc)))
continue;
inter = intersect_aggregates_with_edge (cs, i, inter);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9002abf..47da043 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-04-27 Martin Jambor <mjambor@suse.cz>
+
+ PR ipa/85549
+ * g++.dg/ipa/pr85549.C: New test.
+
2018-04-27 Jakub Jelinek <jakub@redhat.com>
PR c++/85553
diff --git a/gcc/testsuite/g++.dg/ipa/pr85549.C b/gcc/testsuite/g++.dg/ipa/pr85549.C
new file mode 100644
index 0000000..ae0336e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/ipa/pr85549.C
@@ -0,0 +1,28 @@
+/* { dg-do run } */
+/* { dg-options "-O2" } */
+
+#include <vector>
+
+#define N 10
+
+static void visit(int &level, int n, int k, std::vector< int > &value) {
+ level = level + 1;
+ value[k] = level;
+ for (int i = 0 ; i < n; i++)
+ if (value[i] == 0)
+ visit(level, n, i, value);
+}
+void permutations()
+{
+ std::vector< int > value(N);
+ int level = -1;
+ visit(level, N, 0, value);
+}
+void testExtendByBox() {
+ permutations();
+}
+
+int main() {
+ testExtendByBox();
+ return 0;
+}