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) {