https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98731
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target|s390x-linux-gnu |s390x-linux-gnu,
| |powerpc-*-*, powerpc64-*-*
Keywords| |ABI
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Matthias Klose from comment #0)
> It appears that the hash value is completely dependent on the size of
> the object in bytes.
It's not *completely* dependent on the size. Only the last x.size()%64 bits are
hashed incorrectly. For x.size() < 32 it's completely dependent, because we
never look at the right bits. For larger numbers of bits we look at *some* of
them.
Fixing it is an ABI break though, because it would mean that the same value
produces a different hash when compiled with an old GCC or a fixed GCC.
Inserting an element into an unordered_map in one TU and then looking it up in
another TU could fail.