> > The existing check should work ok with lto. If not then we should figure out > why we do not merge the main variants properly. Hmm, adding: Index: tree.c =================================================================== --- tree.c (revision 198796) +++ tree.c (working copy) @@ -11572,6 +11572,12 @@ get_binfo_at_offset (tree binfo, HOST_WI if (TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (expected_type)) return binfo; + else + if (types_compatible_p (type, expected_type)) + { + debug_tree (TYPE_MAIN_VARIANT (type)); + debug_tree (TYPE_MAIN_VARIANT (expected_type)); + } if (offset < 0) return NULL_TREE; @@ -11605,6 +11611,12 @@ get_binfo_at_offset (tree binfo, HOST_WI found_binfo = base_binfo; break; } + else + if (types_compatible_p (TREE_TYPE (base_binfo), TREE_TYPE (fld))) + { + debug_tree (TREE_TYPE (base_binfo)); + debug_tree (TREE_TYPE (fld)); + } if (!found_binfo) return NULL_TREE; binfo = found_binfo;
seems to bring a lot of positives and by quick inspection most of them seem like same classes. I will try to find some time to debug this more. But glancing over the the dumps, I see many of them just have different name spaces. Do we even attempt to merge namespace_decl? How types from same namespaces in different units are supposed to match? Honza > > Richard. > > >Honza >