diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-02-14 18:02:09 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-02-14 18:02:09 +0000 |
commit | d5d7fe56071bd153f8d734d57154a45aff8eee5f (patch) | |
tree | 4011aa0cc1255851ad3f24a09ecb0b2e7db2fba9 /libgo | |
parent | 1da3e63791f9ac3f68d03cecf9fd960ae7aca71d (diff) | |
download | gcc-d5d7fe56071bd153f8d734d57154a45aff8eee5f.tar.gz |
PR go/48501
runtime: Fix identity hash function for big-endian systems.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@184218 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/runtime/go-type-identity.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/libgo/runtime/go-type-identity.c b/libgo/runtime/go-type-identity.c index a0168e24836..142edf42464 100644 --- a/libgo/runtime/go-type-identity.c +++ b/libgo/runtime/go-type-identity.c @@ -32,7 +32,10 @@ __go_type_hash_identity (const void *key, uintptr_t key_size) } u; u.v = 0; __builtin_memcpy (&u.a, key, key_size); - return (uintptr_t) u.v; + if (sizeof (uintptr_t) >= 8) + return (uintptr_t) u.v; + else + return (uintptr_t) ((u.v >> 32) ^ (u.v & 0xffffffff)); } ret = 5381; |