===================================================================
@@ -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;
+}
===================================================================
@@ -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);