summaryrefslogtreecommitdiff
path: root/libgo
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-14 18:02:09 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2012-02-14 18:02:09 +0000
commitd5d7fe56071bd153f8d734d57154a45aff8eee5f (patch)
tree4011aa0cc1255851ad3f24a09ecb0b2e7db2fba9 /libgo
parent1da3e63791f9ac3f68d03cecf9fd960ae7aca71d (diff)
downloadgcc-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.c5
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;