Hi, the problem here is that we ICE on an assert that crept in from earliler stages of development where I wondered if we can hit this somewhat odd situation. Fixed thus.
Honza Index: ChangeLog =================================================================== --- ChangeLog (revision 206011) +++ ChangeLog (working copy) @@ -1,3 +1,9 @@ +2013-12-14 Jan Hubicka <j...@suse.cz> + + PR ipa/59473 + * ipa-devirt.c (get_class_context): Do not ICE when type is found + at wrong offset. + 2013-12-16 Jakub Jelinek <ja...@redhat.com> PR libgomp/58756 Index: ipa-devirt.c =================================================================== --- ipa-devirt.c (revision 205992) +++ ipa-devirt.c (working copy) @@ -848,6 +848,10 @@ get_class_context (ipa_polymorphic_call_ if (TREE_CODE (type) == TREE_CODE (expected_type) && types_same_for_odr (type, expected_type)) { + /* Type can not contain itself on an non-zero offset. In that case + just give up. */ + if (offset != 0) + goto give_up; - gcc_assert (offset == 0); return true; }