From d2022faf53640d74171d9db0f45f03f437ee199c Mon Sep 17 00:00:00 2001
From: Abdulaziz Ghuloum <aghuloum@cs.indiana.edu>
Date: Wed, 29 Oct 2008 13:54:06 -0400
Subject: [PATCH] fixed a few gcc warnings as reported in bug 288824.

---
 scheme/last-revision  |  2 +-
 src/ikarus-collect.c  |  4 ++--
 src/ikarus-data.h     | 16 +++++++-------
 src/ikarus-ffi.c      | 11 +++++-----
 src/ikarus-numerics.c |  2 +-
 src/ikarus-runtime.c  | 51 +++++++++++++++++++------------------------
 6 files changed, 40 insertions(+), 46 deletions(-)

diff --git a/scheme/last-revision b/scheme/last-revision
index 712cd79..b2dffb7 100644
--- a/scheme/last-revision
+++ b/scheme/last-revision
@@ -1 +1 @@
-1650
+1652
diff --git a/src/ikarus-collect.c b/src/ikarus-collect.c
index 645b2df..33c29d8 100644
--- a/src/ikarus-collect.c
+++ b/src/ikarus-collect.c
@@ -1360,12 +1360,12 @@ relocate_new_code(ikptr x, gc_t* gc){
       ikptr displaced_object = obj + obj_off;
       long int next_word = code + code_off + 4;
       ikptr relative_distance = displaced_object - (long int)next_word;
-      if(relative_distance != (int)relative_distance){
+      if(((long int)relative_distance) != ((long)((int)relative_distance))){
         fprintf(stderr, "relocation error with relative=0x%016lx\n", 
             relative_distance);
         exit(-1);
       }
-      *((int*)(code+code_off)) = relative_distance;
+      *((int*)(code+code_off)) = (int)relative_distance;
       p += (3*wordsize);
     }
     else if(tag == 1){
diff --git a/src/ikarus-data.h b/src/ikarus-data.h
index b625b2d..504dd31 100644
--- a/src/ikarus-data.h
+++ b/src/ikarus-data.h
@@ -190,14 +190,14 @@ void ikarus_usage_short(void);
 void* ik_malloc(int);
 void ik_free(void*, int);
 
-ikptr ik_mmap(long int);
-ikptr ik_mmap_typed(long int size, unsigned int type, ikpcb*);
-ikptr ik_mmap_ptr(long int size, int gen, ikpcb*);
-ikptr ik_mmap_data(long int size, int gen, ikpcb*);
-ikptr ik_mmap_code(long int size, int gen, ikpcb*);
-ikptr ik_mmap_mixed(long int size, ikpcb*);
-void ik_munmap(ikptr, long int);
-void ik_munmap_from_segment(ikptr, long int, ikpcb*);
+ikptr ik_mmap(unsigned long int);
+ikptr ik_mmap_typed(unsigned long int size, unsigned int type, ikpcb*);
+ikptr ik_mmap_ptr(unsigned long int size, int gen, ikpcb*);
+ikptr ik_mmap_data(unsigned long int size, int gen, ikpcb*);
+ikptr ik_mmap_code(unsigned long int size, int gen, ikpcb*);
+ikptr ik_mmap_mixed(unsigned long int size, ikpcb*);
+void ik_munmap(ikptr, unsigned long int);
+void ik_munmap_from_segment(ikptr, unsigned long int, ikpcb*);
 ikpcb* ik_make_pcb();
 void ik_delete_pcb(ikpcb*);
 void ik_free_symbol_table(ikpcb* pcb);
diff --git a/src/ikarus-ffi.c b/src/ikarus-ffi.c
index 61afda1..097bd26 100644
--- a/src/ikarus-ffi.c
+++ b/src/ikarus-ffi.c
@@ -167,7 +167,7 @@ ikptr
 ikrt_ffi_prep_cif(ikptr rtptr, ikptr argstptr, ikpcb* pcb) {
   ffi_cif* cif = alloc(sizeof(ffi_cif), 1);
   ffi_abi abi = FFI_DEFAULT_ABI;
-  unsigned int nargs = unfix(ref(argstptr, off_vector_length));
+  int nargs = unfix(ref(argstptr, off_vector_length));
   ffi_type** argtypes = alloc(sizeof(ffi_type*), nargs+1);
   int i;
   for(i=0; i<nargs; i++){
@@ -188,7 +188,7 @@ ikrt_ffi_prep_cif(ikptr rtptr, ikptr argstptr, ikpcb* pcb) {
 }
 
 
-        
+#ifdef DEBUG_FFI        
 static void
 dump_stack(ikpcb* pcb, char* msg) {
   fprintf(stderr, "====================  %s\n", msg);
@@ -201,6 +201,7 @@ dump_stack(ikpcb* pcb, char* msg) {
     p += wordsize;
   }
 }
+#endif
 
 
 /* FIXME: handle stack overflow */
@@ -321,8 +322,8 @@ ikrt_ffi_call(ikptr data, ikptr argsvec, ikpcb* pcb)  {
   ikptr typevec = ref(data, off_vector_data + 2 * wordsize);
   ikptr rtype   = ref(data, off_vector_data + 3 * wordsize);
   ffi_cif* cif = (ffi_cif*) ref(cifptr, off_pointer_data);
-  void* fn = (void*) ref(funptr, off_pointer_data);
-  unsigned int n = unfix(ref(argsvec, off_vector_length));
+  void(*fn)() = (void*) ref(funptr, off_pointer_data);
+  int n = unfix(ref(argsvec, off_vector_length));
   void** avalues = alloc(sizeof(void*), n+1);
   int i;
   for(i=0; i<n; i++){
@@ -394,7 +395,7 @@ generic_callback(ffi_cif *cif, void *ret, void **args, void *user_data){
   ikptr proc   = ref(data, off_vector_data + 1 * wordsize);
   ikptr argtypes_conv = ref(data, off_vector_data + 2 * wordsize);
   ikptr rtype_conv = ref(data, off_vector_data + 3 * wordsize);
-  ikptr n = unfix(ref(argtypes_conv, off_vector_length));
+  int n = unfix(ref(argtypes_conv, off_vector_length));
 
   ikpcb* pcb = the_pcb;
   ikptr code_entry = ref(proc, off_closure_code);
diff --git a/src/ikarus-numerics.c b/src/ikarus-numerics.c
index 5f81df2..6312975 100644
--- a/src/ikarus-numerics.c
+++ b/src/ikarus-numerics.c
@@ -801,7 +801,7 @@ ikrt_bnbnminus(ikptr x, ikptr y, ikpcb* pcb){
     pcb->root0 = &s1;
     pcb->root1 = &s2;
     ikptr res = ik_safe_alloc(pcb, align(disp_bignum_data + n1 * wordsize));
-    bzero((void*)res+disp_bignum_data, n1*wordsize);
+    bzero((void*)(res+disp_bignum_data), n1*wordsize);
     pcb->root0 = 0;
     pcb->root1 = 0;
     long int burrow = 
diff --git a/src/ikarus-runtime.c b/src/ikarus-runtime.c
index 4be15c6..e5b9bf2 100644
--- a/src/ikarus-runtime.c
+++ b/src/ikarus-runtime.c
@@ -50,19 +50,19 @@ extern char **environ;
 #define segment_shift (pageshift+pageshift-2)
 #define segment_index(x) (((unsigned long int)(x)) >> segment_shift)
 
-ikptr ik_mmap(long int size);
-void ik_munmap(ikptr mem, long int size);
+ikptr ik_mmap(unsigned long int size);
+void ik_munmap(ikptr mem, unsigned long int size);
 
 static void
 extend_table_maybe(ikptr p, unsigned long int size, ikpcb* pcb){
   assert(size == align_to_next_page(size));
   ikptr q = p + size;
   if(p < pcb->memory_base){
-    long int new_lo = segment_index(p);
-    long int old_lo = segment_index(pcb->memory_base);
-    long int hi = segment_index(pcb->memory_end);
-    long int new_vec_size = (hi - new_lo) * pagesize;
-    long int old_vec_size = (hi - old_lo) * pagesize;
+    unsigned long int new_lo = segment_index(p);
+    unsigned long int old_lo = segment_index(pcb->memory_base);
+    unsigned long int hi = segment_index(pcb->memory_end);
+    unsigned long int new_vec_size = (hi - new_lo) * pagesize;
+    unsigned long int old_vec_size = (hi - old_lo) * pagesize;
     ikptr v = ik_mmap(new_vec_size);
     bzero((char*)(long)v, new_vec_size - old_vec_size);
     memcpy((char*)(long)(v+new_vec_size-old_vec_size),
@@ -82,11 +82,11 @@ extend_table_maybe(ikptr p, unsigned long int size, ikpcb* pcb){
     pcb->memory_base = (new_lo * segment_size);
   } 
   else if (q > pcb->memory_end){
-    long int lo = segment_index(pcb->memory_base);
-    long int old_hi = segment_index(pcb->memory_end);
-    long int new_hi = segment_index(q+segment_size-1);
-    long int new_vec_size = (new_hi - lo) * pagesize;
-    long int old_vec_size = (old_hi - lo) * pagesize;
+    unsigned long int lo = segment_index(pcb->memory_base);
+    unsigned long int old_hi = segment_index(pcb->memory_end);
+    unsigned long int new_hi = segment_index(q+segment_size-1);
+    unsigned long int new_vec_size = (new_hi - lo) * pagesize;
+    unsigned long int old_vec_size = (old_hi - lo) * pagesize;
     ikptr v = ik_mmap(new_vec_size);
     memcpy((char*)(long)v, 
            (char*)(long)pcb->dirty_vector_base,
@@ -120,7 +120,7 @@ set_segment_type(ikptr base, unsigned long int size, unsigned int type, ikpcb* p
 }
 
 void
-ik_munmap_from_segment(ikptr base, long int size, ikpcb* pcb){
+ik_munmap_from_segment(ikptr base, unsigned long int size, ikpcb* pcb){
   assert(base >= pcb->memory_base);
   assert((base+size) <= pcb->memory_end);
   assert(size == align_to_next_page(size));
@@ -158,7 +158,7 @@ ik_munmap_from_segment(ikptr base, long int size, ikpcb* pcb){
 
 
 ikptr
-ik_mmap_typed(long int size, unsigned int type, ikpcb* pcb){
+ik_mmap_typed(unsigned long int size, unsigned int type, ikpcb* pcb){
   ikptr p;
   if(size == pagesize) {
     ikpage* s = pcb->cached_pages;
@@ -181,34 +181,27 @@ ik_mmap_typed(long int size, unsigned int type, ikpcb* pcb){
 }
 
 ikptr
-ik_mmap_ptr(long int size, int gen, ikpcb* pcb){
+ik_mmap_ptr(unsigned long int size, int gen, ikpcb* pcb){
   return ik_mmap_typed(size, pointers_mt | gen, pcb);
 }
 
 ikptr
-ik_mmap_data(long int size, int gen, ikpcb* pcb){
+ik_mmap_data(unsigned long int size, int gen, ikpcb* pcb){
   return ik_mmap_typed(size, data_mt | gen, pcb);
 }
 
 ikptr
-ik_mmap_code(long int size, int gen, ikpcb* pcb){
+ik_mmap_code(unsigned long int size, int gen, ikpcb* pcb){
   ikptr p = ik_mmap_typed(size, code_mt | gen, pcb);
   if(size > pagesize){
     set_segment_type(p+pagesize, size-pagesize, data_mt|gen, pcb);
   }
-#if 0
-  junk int err = mprotect(p, size, PROT_READ | PROT_WRITE | PROT_EXEC);
-  if(err){
-    fprintf(stderr, "cannot mprotect code: %s\n", strerror(errno));
-    exit(-1);
-  }
-#endif
   return p;
 }
 
 
 ikptr
-ik_mmap_mixed(long int size, ikpcb* pcb){
+ik_mmap_mixed(unsigned long int size, ikpcb* pcb){
   return ik_mmap_typed(size, mainheap_mt, pcb);
 }
 
@@ -216,7 +209,7 @@ ik_mmap_mixed(long int size, ikpcb* pcb){
 
 
 ikptr
-ik_mmap(long int size){
+ik_mmap(unsigned long int size){
   int pages = (size + pagesize - 1) / pagesize;
   total_allocated_pages += pages;
   int mapsize = pages * pagesize;
@@ -246,9 +239,9 @@ ik_mmap(long int size){
 }
 
 void
-ik_munmap(ikptr mem, long int size){
-  int pages = (size + pagesize - 1) / pagesize;
-  int mapsize = pages * pagesize;
+ik_munmap(ikptr mem, unsigned long int size){
+  unsigned long int pages = (size + pagesize - 1) / pagesize;
+  unsigned long int mapsize = pages * pagesize;
   assert(size == mapsize);
   assert(((-pagesize) & (int)mem) == (int)mem);
   total_allocated_pages -= pages;