@@ -1202,9 +1202,14 @@ void value_sett::assign(
1202
1202
" rhs.type():\n " +rhs.type ().pretty ()+" \n " +
1203
1203
" type:\n " +type.pretty ();
1204
1204
1205
- rhs_member= make_member (rhs, name, ns );
1205
+ const typet &followed = ns. follow (rhs. type () );
1206
1206
1207
- assign (lhs_member, rhs_member, ns, is_simplified, add_to_sets);
1207
+ if (followed.id () == ID_struct || followed.id () == ID_union)
1208
+ {
1209
+ rhs_member = make_member (rhs, name, ns);
1210
+
1211
+ assign (lhs_member, rhs_member, ns, is_simplified, add_to_sets);
1212
+ }
1208
1213
}
1209
1214
}
1210
1215
}
@@ -1744,15 +1749,19 @@ exprt value_sett::make_member(
1744
1749
if (component_name==member_operand.get (ID_component_name))
1745
1750
// yes! just take op2
1746
1751
return src.op2 ();
1747
- else
1752
+ else if (ns.follow (src.op0 ().type ()).id () == ID_struct)
1753
+ {
1748
1754
// no! do this recursively
1749
1755
return make_member (src.op0 (), component_name, ns);
1756
+ }
1750
1757
}
1751
1758
else if (src.id ()==ID_typecast)
1752
1759
{
1753
1760
// push through typecast
1754
1761
assert (src.operands ().size ()==1 );
1755
- return make_member (src.op0 (), component_name, ns);
1762
+ const typet &followed = ns.follow (src.op0 ().type ());
1763
+ if (followed.id () == ID_struct || followed.id () == ID_union)
1764
+ return make_member (src.op0 (), component_name, ns);
1756
1765
}
1757
1766
1758
1767
// give up
0 commit comments