Index: src/gcc/testsuite/g++.dg/torture/pr55260-1.C
===================================================================
--- /dev/null
+++ src/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;
+}
Index: src/gcc/ipa-cp.c
===================================================================
--- src.orig/gcc/ipa-cp.c
+++ src/gcc/ipa-cp.c
@@ -2870,10 +2870,10 @@ static struct ipa_agg_replacement_value
 find_aggregate_values_for_callers_subset (struct cgraph_node *node,
 					  VEC (cgraph_edge_p,heap) *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 (cgraph_edge_p, callers, j, cs)
     {
@@ -2891,7 +2891,7 @@ find_aggregate_values_for_callers_subset
 
       /* 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 (cgraph_edge_p, callers, j, cs)
@@ -2943,7 +2943,7 @@ find_aggregate_values_for_callers_subset
 	      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)
 		    inter = agg_replacements_to_vector (cs->caller, delta);
