diff --git a/src/encode.c b/src/encode.c
index a98b6c092db8c0bf8f67ace3310db54e5a9e434d..8d027a2bda32f133aa762c4bb4acdc91f830ccd8 100644
--- a/src/encode.c
+++ b/src/encode.c
@@ -25,7 +25,7 @@
 #include "version.h"
 #include "bignum.h"
 
-RCSID("$Id: encode.c,v 1.64 2000/08/10 09:51:51 per Exp $");
+RCSID("$Id: encode.c,v 1.65 2000/08/10 13:23:59 grubba Exp $");
 
 /* #define ENCODE_DEBUG */
 
@@ -63,8 +63,8 @@ RCSID("$Id: encode.c,v 1.64 2000/08/10 09:51:51 per Exp $");
 double FREXP(double x, int *exp)
 {
   double ret;
-  *exp=(int)ceil(log(fabs(x))/log(2.0));
-  ret=(x*pow(2.0,(FLOAT_TYPE)-*exp));
+  *exp = DO_NOT_WARN((int)ceil(log(fabs(x))/log(2.0)));
+  ret = (x*pow(2.0,(double)-*exp));
   return ret;
 }
 #endif
@@ -222,16 +222,17 @@ static void code_entry(int tag, ptrdiff_t num, struct encode_data *data)
 
   switch(t)
   {
-  case 3: addchar((num >> 24)&0xff);
-  case 2: addchar((num >> 16)&0xff);
-  case 1: addchar((num >> 8)&0xff);
-  case 0: addchar(num&0xff);
+  case 3: addchar(DO_NOT_WARN((num >> 24)&0xff));
+  case 2: addchar(DO_NOT_WARN((num >> 16)&0xff));
+  case 1: addchar(DO_NOT_WARN((num >> 8)&0xff));
+  case 0: addchar(DO_NOT_WARN(num&0xff));
   }
 }
 
 static void code_number(ptrdiff_t num, struct encode_data *data)
 {
-  code_entry(num & 15, num >> 4, data);
+  code_entry(DO_NOT_WARN(num & 15),
+	     num >> 4, data);
 }
 
 #ifdef _REENTRANT
@@ -241,7 +242,7 @@ static void do_enable_threads(void)
 }
 #endif
 
-static int encode_type(char *t, struct encode_data *data)
+static ptrdiff_t encode_type(char *t, struct encode_data *data)
 {
   char *q=t;
 one_more_type:
@@ -390,8 +391,8 @@ static void encode_value2(struct svalue *val, struct encode_data *data)
 	int y;
 	double tmp;
 
-	tmp=FREXP((double)val->u.float_number, &y);
-	x=(INT32)((1<<30)*tmp);
+	tmp = FREXP((double)val->u.float_number, &y);
+	x = DO_NOT_WARN((INT32)((1<<30)*tmp));
 	y-=30;
 #if 0
 	while(x && y && !(x&1))
@@ -741,8 +742,8 @@ void f_encode_value_canonic(INT32 args)
 struct decode_data
 {
   unsigned char *data;
-  INT32 len;
-  INT32 ptr;
+  ptrdiff_t len;
+  ptrdiff_t ptr;
   struct mapping *decoded;
   struct svalue counter;
   struct object *codec;
@@ -791,7 +792,7 @@ static int my_extract_char(struct decode_data *data)
   } while(0);
 
 #define getdata2(S,L) do {						\
-      if(data->ptr + (long)(sizeof(S[0])*(L)) > data->len)		\
+      if(data->ptr + (ptrdiff_t)(sizeof(S[0])*(L)) > data->len)		\
 	error("Failed to decode string. (string range error)\n");	\
       MEMCPY((S),(data->data + data->ptr), sizeof(S[0])*(L));		\
       data->ptr+=sizeof(S[0])*(L);					\
@@ -1316,7 +1317,7 @@ static void decode_value2(struct decode_data *data)
 	case 1:
 	{
 	  int d;
-	  SIZE_T size=0;
+	  size_t size=0;
 	  char *dat;
 	  struct program *p;
 	  ONERROR err1;
@@ -1620,18 +1621,20 @@ static ptrdiff_t extract_int(char **v, INT32 *l)
 
 static void rec_restore_value(char **v, INT32 *l)
 {
-  INT32 t,i;
+  ptrdiff_t t, i;
 
-  i=extract_int(v,l);
-  t=extract_int(v,l);
+  i = extract_int(v,l);
+  t = extract_int(v,l);
   switch(i)
   {
-  case TAG_INT: push_int(t); return;
+  case TAG_INT:
+    push_int(DO_NOT_WARN(t));
+    return;
 
   case TAG_FLOAT:
-    if(sizeof(INT32) < sizeof(float))  /* FIXME FIXME FIXME FIXME */
+    if(sizeof(ptrdiff_t) < sizeof(FLOAT_TYPE))  /* FIXME FIXME FIXME FIXME */
       error("Float architecture not supported.\n");
-    push_int(t); /* WARNING! */
+    push_int(DO_NOT_WARN(t)); /* WARNING! */
     Pike_sp[-1].type = T_FLOAT;
     return;
 
@@ -1643,7 +1646,8 @@ static void rec_restore_value(char **v, INT32 *l)
     if(t<0) error("Format error, length of string is negative.\n");
     if(*l < t) error("Format error, string to short\n");
     push_string(make_shared_binary_string(*v, t));
-    (*l)-= t; (*v)+= t;
+    (*l)-= t;
+    (*v)+= t;
     return;
 
   case TAG_ARRAY:
diff --git a/src/gc.c b/src/gc.c
index 7f405bc3166714a3f82197795e18f4761ad0ddd2..235d4937b2b0fc676c7dd6070b44ad6cab67d3f9 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -29,7 +29,7 @@ struct callback *gc_evaluator_callback=0;
 
 #include "block_alloc.h"
 
-RCSID("$Id: gc.c,v 1.114 2000/08/10 09:25:44 grubba Exp $");
+RCSID("$Id: gc.c,v 1.115 2000/08/10 13:34:36 grubba Exp $");
 
 /* Run garbage collect approximately every time
  * 20 percent of all arrays, objects and programs is
@@ -318,7 +318,7 @@ void describe_location(void *real_memblock,
 	    indent,"",
 	    get_name_of_type(type),
 	    memblock,
-	    ((long)location - (long)memblock));
+	    (long)((char *)location - (char *)memblock));
   else
     fprintf(stderr,"%*s-> at location %p in unknown memblock (mmaped?)\n",
 	    indent,"",
@@ -360,9 +360,9 @@ void describe_location(void *real_memblock,
 
       if(p->inherits &&
 	 ptr >= (char *)p->inherits  &&
-	 ptr<(char*)(p->inherits+p->num_inherits)) 
+	 ptr < (char*)(p->inherits+p->num_inherits)) 
       {
-	e=((ptrdiff_t)ptr - (ptrdiff_t)(p->inherits)) / sizeof(struct inherit);
+	e=((char *)ptr - (char *)(p->inherits)) / sizeof(struct inherit);
 	fprintf(stderr,"%*s  **In p->inherits[%ld] (%s)\n",indent,"",
 		e,
 		p->inherits[e].name ? p->inherits[e].name->str : "no name");
@@ -371,9 +371,9 @@ void describe_location(void *real_memblock,
 
       if(p->constants &&
 	 ptr >= (char *)p->constants  &&
-	 ptr<(char*)(p->constants+p->num_constants))
+	 ptr < (char*)(p->constants+p->num_constants))
       {
-	e=((ptrdiff_t)ptr - (ptrdiff_t)(p->constants)) /
+	e = ((char *)ptr - (char *)(p->constants)) /
 	  sizeof(struct program_constant);
 	fprintf(stderr,"%*s  **In p->constants[%ld] (%s)\n",indent,"",
 		e,
@@ -384,9 +384,9 @@ void describe_location(void *real_memblock,
 
       if(p->identifiers && 
 	 ptr >= (char *)p->identifiers  &&
-	 ptr<(char*)(p->identifiers+p->num_identifiers))
+	 ptr < (char*)(p->identifiers+p->num_identifiers))
       {
-	e=((ptrdiff_t)ptr - (ptrdiff_t)(p->identifiers)) /
+	e = ((char *)ptr - (char *)(p->identifiers)) /
 	  sizeof(struct identifier);
 	fprintf(stderr,"%*s  **In p->identifiers[%ld] (%s)\n",indent,"",
 		e,