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.

Reply via email to