Fix a nasty 64-bit-uncleanness bug in OSet spotted by Julian -- for fast
comparisons it was only considering the bottom 32-bits of the key.



git-svn-id: svn://svn.valgrind.org/valgrind/trunk@5427 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/coregrind/m_oset.c b/coregrind/m_oset.c
index 810890f..7117ea1 100644
--- a/coregrind/m_oset.c
+++ b/coregrind/m_oset.c
@@ -171,13 +171,13 @@
 }
 
 // Compare the first word of each element.  Inlining is *crucial*.
-static inline Int fast_cmp(void* k, AvlNode* n)
+static inline Word fast_cmp(void* k, AvlNode* n)
 {
-   return ( *(Int*)k - *(Int*)elem_of_node(n) );
+   return ( *(Word*)k - *(Word*)elem_of_node(n) );
 }
 
 // Compare a key and an element.  Inlining is *crucial*.
-static inline Int slow_cmp(AvlTree* t, void* k, AvlNode* n)
+static inline Word slow_cmp(AvlTree* t, void* k, AvlNode* n)
 {
    return t->cmp(k, elem_of_node(n));
 }
@@ -349,7 +349,7 @@
 /*--- Insertion                                                    ---*/
 /*--------------------------------------------------------------------*/
 
-static inline Int cmp_key_root(AvlTree* t, AvlNode* n)
+static inline Word cmp_key_root(AvlTree* t, AvlNode* n)
 {
    return t->cmp
           ? slow_cmp(t, slow_key_of_node(t, n), t->root)
@@ -360,7 +360,7 @@
 // Returns True if the depth of the tree has grown.
 static Bool avl_insert(AvlTree* t, AvlNode* n)
 {
-   Int cmpres = cmp_key_root(t, n);
+   Word cmpres = cmp_key_root(t, n);
 
    if (cmpres < 0) {
       // Insert into the left subtree.
@@ -464,7 +464,7 @@
 // Find the *node* in t matching k, or NULL if not found.
 static AvlNode* avl_lookup(AvlTree* t, void* k)
 {
-   Int      cmpres;
+   Word     cmpres;
    AvlNode* curr = t->root;
 
    if (t->cmp) {
@@ -481,10 +481,10 @@
       // elem_of_node because it saves about 10% on lookup time.  This
       // shouldn't be very dangerous because each node will have been
       // checked on insertion.
-      Int kk = *(Int*)k;
+      Word kk = *(Word*)k;
       while (True) {
          if (curr == NULL) return NULL;
-         cmpres = kk - *(Int*)elem_of_node_no_check(curr);
+         cmpres = kk - *(Word*)elem_of_node_no_check(curr);
          if (cmpres < 0) curr = curr->left;  else
          if (cmpres > 0) curr = curr->right; else
          return curr;
@@ -533,7 +533,7 @@
 static Bool avl_remove(AvlTree* t, AvlNode* n)
 {
    Bool ch;
-   Int  cmpres = cmp_key_root(t, n);
+   Word cmpres = cmp_key_root(t, n);
 
    if (cmpres < 0) {
       AvlTree left_subtree;
@@ -616,7 +616,7 @@
 // Returns True if the depth of the tree has shrunk.
 static Bool avl_removeroot(AvlTree* t)
 {
-   Int ch;
+   Bool     ch;
    AvlNode* n;
 
    if (!t->root->left) {