- xbt_dynar_foreach(type->members, cursor, member){
- if(switch_types)
- res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, previous, other_info, info, member->dw_type_id, -1, check_ignore, 0);
- else
- res = compare_heap_area_with_type(state, (char *)real_area1 + member->offset, (char *)real_area2 + member->offset, (char *)area1 + member->offset, (char *)area2 + member->offset, previous, info, other_info, member->dw_type_id, -1, check_ignore, 0);
+ xbt_dynar_foreach(type->members, cursor, member){
+ // TODO, optimize this? (for the offset case)
+ char* real_member1 = mc_member_resolve(real_area1, type, member, snapshot1);
+ char* real_member2 = mc_member_resolve(real_area2, type, member, snapshot2);
+ char* member1 = mc_translate_address((uintptr_t)real_member1, snapshot1);
+ char* member2 = mc_translate_address((uintptr_t)real_member2, snapshot2);
+ res = compare_heap_area_with_type(state, real_member1, real_member2, member1, member2, snapshot1, snapshot2, previous, member->subtype, -1, check_ignore, 0);