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.

Reply via email to