aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2012-11-20 12:20:41 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2012-11-20 12:20:41 +0100
commitdffdd6e5b031ed6cc3a32aba17669ea69aa6538c (patch)
treefba9636433b58f1c588237561e62f137f7e46b03 /gcc
parente7d8fc6c1069d17cba2e0fb4ab6ec69b50273f08 (diff)
downloadgcc-dffdd6e5b031ed6cc3a32aba17669ea69aa6538c.zip
gcc-dffdd6e5b031ed6cc3a32aba17669ea69aa6538c.tar.gz
gcc-dffdd6e5b031ed6cc3a32aba17669ea69aa6538c.tar.bz2
re PR tree-optimization/55260 (ICE: in ipa_get_parm_lattices, at ipa-cp.c:263 with -O2 -fno-inline -fipa-cp-clone)
2012-11-20 Martin Jambor <mjambor@suse.cz> PR tree-optimization/55260 * ipa-cp.c (find_aggregate_values_for_callers_subset): Rename info to dest_info, use caller_info instead of info when determining whether callee is a clone. * testsuite/g++.dg/torture/pr55260-1.C: New test. From-SVN: r193657
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/ipa-cp.c8
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/torture/pr55260-1.C24
4 files changed, 40 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 92c138f..fc073b3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2012-11-20 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/55260
+ * ipa-cp.c (find_aggregate_values_for_callers_subset): Rename info to
+ dest_info, use caller_info instead of info when determining whether
+ callee is a clone.
+
2012-11-20 Andrey Turetskiy <andrey.turetskiy@gmail.com>
* config/i386/sse.md (*<ssse3_avx2>_pmulhrsw<mode>3): Merge
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 57382b5..a0f5f5f 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -2859,10 +2859,10 @@ static struct ipa_agg_replacement_value *
find_aggregate_values_for_callers_subset (struct cgraph_node *node,
vec<cgraph_edge_p> callers)
{
- struct ipa_node_params *info = IPA_NODE_REF (node);
+ struct ipa_node_params *dest_info = IPA_NODE_REF (node);
struct ipa_agg_replacement_value *res = NULL;
struct cgraph_edge *cs;
- int i, j, count = ipa_get_param_count (info);
+ int i, j, count = ipa_get_param_count (dest_info);
FOR_EACH_VEC_ELT (callers, j, cs)
{
@@ -2880,7 +2880,7 @@ find_aggregate_values_for_callers_subset (struct cgraph_node *node,
/* Among other things, the following check should deal with all by_ref
mismatches. */
- if (ipa_get_parm_lattices (info, i)->aggs_bottom)
+ if (ipa_get_parm_lattices (dest_info, i)->aggs_bottom)
continue;
FOR_EACH_VEC_ELT (callers, j, cs)
@@ -2932,7 +2932,7 @@ find_aggregate_values_for_callers_subset (struct cgraph_node *node,
struct ipcp_param_lattices *src_plats;
HOST_WIDE_INT delta = ipa_get_jf_ancestor_offset (jfunc);
- if (info->ipcp_orig_node)
+ if (caller_info->ipcp_orig_node)
{
if (!inter.exists ())
inter = agg_replacements_to_vector (cs->caller, delta);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1a9c010..cb65187 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-11-20 Martin Jambor <mjambor@suse.cz>
+
+ PR tree-optimization/55260
+ * g++.dg/torture/pr55260-1.C: New test.
+
2012-11-20 Sofiane Naci <sofiane.naci@arm.com>
* gcc.target/aarch64/atomic-comp-swap-release-acquire.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/torture/pr55260-1.C b/gcc/testsuite/g++.dg/torture/pr55260-1.C
new file mode 100644
index 0000000..552da8d
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr55260-1.C
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-std=gnu++0x -fno-inline" } */
+/* { dg-add-options bind_pic_locally } */
+
+ struct B
+ {
+ constexpr B ():
+ bp ()
+ {}
+ ~B ()
+ {
+ if (bp)
+ bp->f ();
+ }
+ void f ();
+ B *bp;
+ };
+struct A { B b;
+};
+
+void foo ()
+{
+ A a;
+}