https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83983
Steve Ellcey <sje at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sje at gcc dot gnu.org --- Comment #3 from Steve Ellcey <sje at gcc dot gnu.org> --- I tried digging into this some but was not able to come up with a fix. I compared x86, which gives the expected error messages with aarch64 which gives different errors and tried to find out where they diverged. I tracked it down to get_odr_type in ipa-devirt.c. Just before: if (val->type != type && (!val->types_set || !val->types_set->add (type))) I added this print statement: fprintf(stderr,"%p %p %p\n", (void *) type, (void *) val->type, (void *) val->types_set); On x86 I see: 0x7f98aa018dc8 0x7f98aa018930 (nil) 0x7f98aa0189d8 0x7f98aa018d20 (nil) 0x7f98aa0189d8 0x7f98aa018d20 0x32c9610 0x7f0222cbfc78 0x7f0222cbf9d8 (nil) 0x7f0222cbfa80 0x7f0222cbfa80 (nil) On Aarch64 I see: 0x4002c859aaa0 0x4002c859a758 (nil) 0x4002c859a6b0 0x4002c859a6b0 (nil) 0x4002c859a6b0 0x4002c859a6b0 (nil) 0x4001f45aa9f8 0x4001f45aa758 (nil) 0x4001f45aa800 0x4001f45aa800 (nil) I think the second line where type and val->type are the same for Aarch64 but not for x86 is where the problem is but I am not sure why we have this difference. I think it may be a bug in the odr hash function with an accidental hash collision but I am not sure.