From e9f659947c30458e6f15fe94dabea331b77ce36b Mon Sep 17 00:00:00 2001
From: Guillaume Petiot <guillaume.petiot@cea.fr>
Date: Thu, 31 Jan 2013 14:45:29 +0000
Subject: [PATCH] [e-acsl] now using size_t instead of ulong

---
 .../e-acsl/memory_model/e_acsl_bittree.c      | 47 ++++++++++---------
 .../e-acsl/memory_model/e_acsl_bittree.h      |  4 +-
 .../e-acsl/memory_model/e_acsl_mmodel_api.h   |  2 +-
 3 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
index 6d78a7cfc94..f31f12e57d2 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.c
@@ -2,6 +2,7 @@
 #include <errno.h>
 #include <unistd.h>
 #include "stdio.h"
+#include "stdlib.h"
 #include "e_acsl_mmodel_api.h"
 #include "e_acsl_bittree.h"
 #include "e_acsl_mmodel.h"
@@ -32,7 +33,7 @@ int Tneq[] = {0,0,1,-2,2,-4,5,-6,4,-8,9,-10,10,-12,13,-14,-15};
 
 #elif WORDBITS == 32
 
-unsigned long Tmasks[] = {
+size_t Tmasks[] = {
 0x0,
 0x80000000,
 0xc0000000,
@@ -77,7 +78,7 @@ int Tneq[] =
 
 #else /* WORDBITS == 64 */
 
-unsigned long Tmasks[] = {
+size_t Tmasks[] = {
 0x0,
 0x8000000000000000,
 0xc000000000000000,
@@ -160,7 +161,7 @@ int Tneq[] =
 struct bittree {
   int is_leaf;
   char* addr;
-  unsigned long mask;
+  size_t mask;
   struct bittree * left;
   struct bittree * right;
   struct bittree * father;
@@ -169,26 +170,28 @@ struct bittree {
 
 
 /* common bits of two addresses */
-unsigned long mask(void * a, void * b) {
-  unsigned long nxor = ~((unsigned long)a ^ (unsigned long)b);
+size_t mask(void * a, void * b) {
+  size_t nxor = ~((size_t)a ^ (size_t)b);
   int i = WORDBITS/2; /* dichotomic search, starting in the middle */
   
   /* if the current mask matches we use transition from Teq, else from Tneq
      we stop as soon as i is negative, meaning that we found the mask */
   while(i > 0) i = (nxor >= Tmasks[i]) ? Teq[i] : Tneq[i];
 
+  assert(((size_t)a & Tmasks[-i]) == ((size_t)b & Tmasks[-i]));
+
   /* a negative element i from Teq or Tneq means stop and return Tmasks[-i] */
   return Tmasks[-i];
 }
 
 /* logical AND of a bittree and a new node */
 void* and(struct bittree * a, struct _block * b) {
-  return (void*) ((unsigned long)a->addr & (unsigned long)b->ptr);
+  return (void*) ((size_t)a->addr & (size_t)b->ptr);
 }
 
 /* does an address matches the mask of a bittree ? */
 int matches_mask(struct bittree * a, void * b) {
-  return ((unsigned long)a->addr & a->mask) == ((unsigned long)b & a->mask);
+  return ((size_t)a->addr & a->mask) == ((size_t)b & a->mask);
 }
 
 /* remove the block from the structure */
@@ -238,7 +241,7 @@ void __remove_element (struct _block * ptr) {
     /* visit child with greatest common prefix,
        if the bit next to the mask is set to 1, go to right child,
        because its address is higher than the other */
-    curr = ((curr->mask >> 1) & ( ~ curr->mask ) & (unsigned long)ptr->ptr) ?
+    curr = ((curr->mask >> 1) & ( ~ curr->mask ) & (size_t)ptr->ptr) ?
       curr->right : curr->left;
   }
 }
@@ -272,7 +275,7 @@ void __add_element (struct _block * ptr) {
 
 	/* visit child with greatest common prefix */
 	curr =
-	  ((curr->mask >> 1) & ( ~ curr->mask ) & (unsigned long)ptr->ptr) ?
+	  ((curr->mask >> 1) & ( ~ curr->mask ) & (size_t)ptr->ptr) ?
 	  curr->right : curr->left;
       }
       
@@ -296,7 +299,7 @@ void __add_element (struct _block * ptr) {
 	
 	curr->is_leaf = 0;
 	curr->mask = mask(new_node->addr, ptr->ptr);
-	/*curr->addr = (void*)((unsigned long)and(new_node, ptr) & curr->mask);*/
+	/*curr->addr = (void*)((size_t)and(new_node, ptr) & curr->mask);*/
 
 	/* smaller at left, higher at right */
 	if(new_node->addr < ptr->ptr) {
@@ -330,11 +333,11 @@ struct _block * __get_exact (void * ptr) {
     assert(tmp->left != NULL && tmp->right != NULL);
     
     /* visit child with greatest common prefix */
-    if(((unsigned long)tmp->right->addr & (unsigned long)tmp->right->mask)
-       == ((unsigned long)ptr & (unsigned long)tmp->right->mask))
+    if(((size_t)tmp->right->addr & (size_t)tmp->right->mask)
+       == ((size_t)ptr & (size_t)tmp->right->mask))
       tmp = tmp->right;
-    else if(((unsigned long)tmp->left->addr & (unsigned long)tmp->left->mask)
-	    == ((unsigned long)ptr & (unsigned long)tmp->left->mask))
+    else if(((size_t)tmp->left->addr & (size_t)tmp->left->mask)
+	    == ((size_t)ptr & (size_t)tmp->left->mask))
       tmp = tmp->left;
     else
       return NULL;
@@ -347,11 +350,11 @@ struct _block * __get_exact (void * ptr) {
    DO NOT CALL IT FROM ANYWHERE ELSE */
 struct _block * __get_cont_by_left_child (void * ptr, struct bittree * b) {
   struct bittree * tmp = b;
-  assert(((unsigned long)b->addr & b->mask) == ((unsigned long)ptr & b->mask));
+  assert(((size_t)b->addr & b->mask) == ((size_t)ptr & b->mask));
 
   while(!tmp->is_leaf) {
     assert(tmp->left != NULL && tmp->right != NULL);
-    if(((unsigned long)tmp->left->addr & tmp->mask) == (unsigned long)ptr)
+    if(((size_t)tmp->left->addr & tmp->mask) == (size_t)ptr)
       tmp = tmp->left;
     else
       return NULL;
@@ -382,8 +385,8 @@ struct _block * __get_cont (void * ptr) {
     
     assert(tmp->left != NULL && tmp->right != NULL);
 
-    if(((unsigned long)tmp->right->addr & tmp->right->mask)
-       == (unsigned long)ptr) {
+    if(((size_t)tmp->right->addr & tmp->right->mask)
+       == (size_t)ptr) {
       struct _block * r = __get_cont_by_left_child(ptr, tmp->right);
       if(r == NULL)
 	tmp = tmp->left;
@@ -392,11 +395,11 @@ struct _block * __get_cont (void * ptr) {
     }
 
     /* the right child has the highest address, so we test it first */
-    else if(((unsigned long)tmp->right->addr & tmp->right->mask)
-       <= ((unsigned long)ptr & tmp->right->mask))
+    else if(((size_t)tmp->right->addr & tmp->right->mask)
+       <= ((size_t)ptr & tmp->right->mask))
       tmp = tmp->right;
-    else if(((unsigned long)tmp->left->addr & tmp->left->mask)
-	    <= ((unsigned long)ptr & tmp->left->mask))
+    else if(((size_t)tmp->left->addr & tmp->left->mask)
+	    <= ((size_t)ptr & tmp->left->mask))
       tmp = tmp->left;
     else return NULL;
   }
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.h b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.h
index e38c0251c62..620a59d44be 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.h
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_bittree.h
@@ -1,6 +1,8 @@
 #ifndef E_ACSL_BITTREE
 #define E_ACSL_BITTREE
 
-unsigned long mask(void*, void*);
+#include "stdlib.h"
+
+size_t mask(void*, void*);
 
 #endif
diff --git a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel_api.h b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel_api.h
index f720a1240cc..c99fd4285fa 100644
--- a/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel_api.h
+++ b/src/plugins/e-acsl/share/e-acsl/memory_model/e_acsl_mmodel_api.h
@@ -22,7 +22,7 @@ struct _block {
   size_t size;	/* size in bytes */
 /* Keep trace of initialized sub-blocks within a memory block */
   unsigned char * init_ptr; /* dynamic array of booleans */
-  unsigned long init_cpt;
+  size_t init_cpt;
   _Bool is_litteral_string;
 };
 
-- 
GitLab