diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 960c8e0b9a74d97bb98513ccb488cd8dd43af36b..ac35e9276d0c50234bc3d7a5845e087ee0828cdc 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: builtin_functions.c,v 1.297 2000/08/15 11:07:32 grubba Exp $");
+RCSID("$Id: builtin_functions.c,v 1.298 2000/08/16 10:19:22 grubba Exp $");
 #include "interpret.h"
 #include "svalue.h"
 #include "pike_macros.h"
@@ -4040,7 +4040,7 @@ static struct array* diff_build(struct array *a,
 				struct array *seq)
 {
    struct array *ad,*bd;
-   int bi,ai,lbi,lai,i,eqstart;
+   ptrdiff_t bi, ai, lbi, lai, i, eqstart;
 
    /* FIXME(?) memory unfreed upon error here (and later) */
    ad=low_allocate_array(0,32);
diff --git a/src/docode.c b/src/docode.c
index b3cdadf1b935d8facd30a1ec6d81389d849bf18f..6c179c65bd12a4733d8058cb80931c3232221235 100644
--- a/src/docode.c
+++ b/src/docode.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: docode.c,v 1.78 2000/08/15 16:13:55 grubba Exp $");
+RCSID("$Id: docode.c,v 1.79 2000/08/16 10:49:19 grubba Exp $");
 #include "las.h"
 #include "program.h"
 #include "pike_types.h"
@@ -343,9 +343,9 @@ static int do_docode2(node *n,int flags)
     if(!CDDR(n))
     {
       tmp1=alloc_label();
-      do_jump_when_zero(CAR(n), tmp1);
+      do_jump_when_zero(CAR(n), DO_NOT_WARN((INT32)tmp1));
       DO_CODE_BLOCK(CADR(n));
-      emit1(F_LABEL, tmp1);
+      emit1(F_LABEL, DO_NOT_WARN((INT32)tmp1));
       current_switch_jumptable = prev_switch_jumptable;
       return 0;
     }
@@ -353,22 +353,22 @@ static int do_docode2(node *n,int flags)
     if(!CADR(n))
     {
       tmp1=alloc_label();
-      do_jump_when_non_zero(CAR(n), tmp1);
+      do_jump_when_non_zero(CAR(n), DO_NOT_WARN((INT32)tmp1));
       DO_CODE_BLOCK(CDDR(n));
-      emit1(F_LABEL,tmp1);
+      emit1(F_LABEL, DO_NOT_WARN((INT32)tmp1));
       current_switch_jumptable = prev_switch_jumptable;
       return 0;
     }
 
     tmp1=alloc_label();
-    do_jump_when_zero(CAR(n),tmp1);
+    do_jump_when_zero(CAR(n), DO_NOT_WARN((INT32)tmp1));
 
     adroppings=do_docode(CADR(n), flags);
     tmp3=emit1(F_POP_N_ELEMS,0);
 
     /* Else */
     tmp2=do_jump(F_BRANCH,-1);
-    emit1(F_LABEL, tmp1);
+    emit1(F_LABEL, DO_NOT_WARN((INT32)tmp1));
 
     bdroppings=do_docode(CDDR(n), flags);
     if(adroppings < bdroppings)
@@ -378,11 +378,12 @@ static int do_docode2(node *n,int flags)
 
     if(adroppings > bdroppings)
     {
-      update_arg(tmp3,adroppings-bdroppings);
+      update_arg(DO_NOT_WARN((INT32)tmp3),
+		 adroppings - bdroppings);
       adroppings=bdroppings;
     }
 
-    emit1(F_LABEL, tmp2);
+    emit1(F_LABEL, DO_NOT_WARN((INT32)tmp2));
 
     current_switch_jumptable = prev_switch_jumptable;
     return adroppings;
@@ -531,9 +532,9 @@ static int do_docode2(node *n,int flags)
   case F_LAND:
   case F_LOR:
     tmp1=alloc_label();
-    do_cond_jump(CAR(n), tmp1, n->token == F_LOR, 0);
+    do_cond_jump(CAR(n), DO_NOT_WARN((INT32)tmp1), n->token == F_LOR, 0);
     code_expression(CDR(n), flags, n->token == F_LOR ? "||" : "&&");
-    emit1(F_LABEL,tmp1);
+    emit1(F_LABEL, DO_NOT_WARN((INT32)tmp1));
     return 1;
 
   case F_EQ:
@@ -562,7 +563,7 @@ static int do_docode2(node *n,int flags)
     if(do_docode(CDR(n),DO_NOT_COPY)!=2)
       fatal("Compiler internal error (at %ld).\n",(long)lex.current_line);
     emit0(n->token);
-    return tmp1;
+    return DO_NOT_WARN((INT32)tmp1);
 
   case F_INC:
   case F_POST_INC:
@@ -617,7 +618,7 @@ static int do_docode2(node *n,int flags)
     }else{
       tmp2=ins_label(-1);
     }
-    do_jump_when_non_zero(CAR(n),tmp2);
+    do_jump_when_non_zero(CAR(n), DO_NOT_WARN((INT32)tmp2));
     ins_label(current_break);
 
     current_switch_jumptable = prev_switch_jumptable;
@@ -672,8 +673,8 @@ static int do_docode2(node *n,int flags)
     tmp1=ins_label(-1);
     DO_CODE_BLOCK(CDR(n));
     ins_label(current_continue);
-    emit1(F_LABEL,tmp3);
-    do_jump(n->token,tmp1);
+    emit1(F_LABEL, DO_NOT_WARN((INT32)tmp3));
+    do_jump(n->token, DO_NOT_WARN((INT32)tmp1));
     ins_label(current_break);
 
 #ifdef PIKE_DEBUG
@@ -715,8 +716,8 @@ static int do_docode2(node *n,int flags)
 
     DO_CODE_BLOCK(CDR(n));
     ins_label(current_continue);
-    emit1(F_LABEL,tmp3);
-    do_jump(n->token,tmp1);
+    emit1(F_LABEL, DO_NOT_WARN((INT32)tmp3));
+    do_jump(n->token, DO_NOT_WARN((INT32)tmp1));
     ins_label(current_break);
 #ifdef PIKE_DEBUG
     if(d_flag)
@@ -743,7 +744,7 @@ static int do_docode2(node *n,int flags)
     tmp2=ins_label(-1);
     DO_CODE_BLOCK(CAR(n));
     ins_label(current_continue);
-    do_jump_when_non_zero(CDR(n),tmp2);
+    do_jump_when_non_zero(CDR(n), DO_NOT_WARN((INT32)tmp2));
     ins_label(current_break);
 
     current_switch_jumptable = prev_switch_jumptable;
@@ -765,11 +766,11 @@ static int do_docode2(node *n,int flags)
       return 0;
     }
     tmp1=store_prog_string(n->type);
-    emit1(F_STRING,tmp1);
+    emit1(F_STRING, DO_NOT_WARN((INT32)tmp1));
 
     tmp1=do_docode(CAR(n),0);
     if(!tmp1) { emit0(F_CONST0); tmp1=1; }
-    if(tmp1>1) do_pop(tmp1-1);
+    if(tmp1>1) do_pop(DO_NOT_WARN((INT32)(tmp1-1)));
 
     emit0(F_CAST);
     return 1;
@@ -777,15 +778,15 @@ static int do_docode2(node *n,int flags)
   case F_SOFT_CAST:
     if (runtime_options & RUNTIME_CHECK_TYPES) {
       tmp1 = store_prog_string(n->type);
-      emit1(F_STRING, tmp1);
+      emit1(F_STRING, DO_NOT_WARN((INT32)tmp1));
       tmp1 = do_docode(CAR(n), 0);
       if (!tmp1) { emit0(F_CONST0); tmp1 = 1; }
-      if (tmp1 > 1) do_pop(tmp1 - 1);
+      if (tmp1 > 1) do_pop(DO_NOT_WARN((INT32)(tmp1 - 1)));
       emit0(F_SOFT_CAST);
       return 1;
     }
     tmp1 = do_docode(CAR(n), flags);
-    if (tmp1 > 1) do_pop(tmp1 - 1);
+    if (tmp1 > 1) do_pop(DO_NOT_WARN((INT32)(tmp1 - 1)));
     return !!tmp1;
 
   case F_APPLY:
@@ -803,7 +804,7 @@ static int do_docode2(node *n,int flags)
 	    tmp1=store_constant(& CAR(n)->u.sval,
 				!(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),
 				CAR(n)->name);
-	    emit1(F_APPLY,tmp1);
+	    emit1(F_APPLY, DO_NOT_WARN((INT32)tmp1));
 	  }
 	  if(n->type == void_type_string)
 	    return 0;
@@ -820,7 +821,7 @@ static int do_docode2(node *n,int flags)
       tmp1=store_constant(& CAR(n)->u.sval,
 			  !(CAR(n)->tree_info & OPT_EXTERNAL_DEPEND),
 			  CAR(n)->name);
-      emit1(F_APPLY,tmp1);
+      emit1(F_APPLY, DO_NOT_WARN((INT32)tmp1));
       
       return 1;
     }
@@ -855,7 +856,7 @@ static int do_docode2(node *n,int flags)
 	}else{
 	  /* We might want to put "predef::"+foo->name here /Hubbe */
 	  tmp1=store_constant(& foo->u.sval, 1, foo->name);
-	  emit1(F_APPLY, tmp1);
+	  emit1(F_APPLY, DO_NOT_WARN((INT32)tmp1));
 	}
       }
       free_node(foo);
@@ -866,7 +867,7 @@ static int do_docode2(node *n,int flags)
   case F_COMMA_EXPR:
     tmp1=do_docode(CAR(n),flags & ~WANT_LVALUE);
     tmp1+=do_docode(CDR(n),flags);
-    return tmp1;
+    return DO_NOT_WARN((INT32)tmp1);
 
 
     /* Switch:
@@ -967,7 +968,8 @@ static int do_docode2(node *n,int flags)
     for(e=1; e<cases*2+2; e++)
       update_arg(jumptable[e], current_switch_jumptable[e]);
 
-    update_arg(tmp1, store_constant(Pike_sp-1,1,0));
+    update_arg(DO_NOT_WARN((INT32)tmp1),
+	       store_constant(Pike_sp-1,1,0));
 
     pop_stack();
     free((char *)jumptable);
@@ -1110,7 +1112,7 @@ static int do_docode2(node *n,int flags)
   case F_SSCANF:
     tmp1=do_docode(CAR(n),DO_NOT_COPY);
     tmp2=do_docode(CDR(n),DO_NOT_COPY | DO_LVALUE);
-    emit1(F_SSCANF,tmp1+tmp2);
+    emit1(F_SSCANF, DO_NOT_WARN((INT32)(tmp1+tmp2)));
     return 1;
 
   case F_CATCH:
@@ -1128,7 +1130,7 @@ static int do_docode2(node *n,int flags)
     ins_label(current_continue);
     ins_label(current_break);
     emit0(F_THROW_ZERO);
-    ins_label(tmp1);
+    ins_label(DO_NOT_WARN((INT32)tmp1));
 
     current_break=break_save;
     current_continue=continue_save;
@@ -1145,7 +1147,7 @@ static int do_docode2(node *n,int flags)
       if(tmp1 & 1)
 	fatal("Very internal compiler error.\n");
 #endif
-      emit1(F_ARRAY_LVALUE, tmp1>>1);
+      emit1(F_ARRAY_LVALUE, DO_NOT_WARN((INT32)(tmp1>>1)));
       return 2;
 
   case F_ARROW:
@@ -1167,7 +1169,7 @@ static int do_docode2(node *n,int flags)
 	  emit0(F_COPY_VALUE);
       }
     }
-    return tmp1;
+    return DO_NOT_WARN((INT32)tmp1);
 
   case F_INDEX:
     if(flags & WANT_LVALUE)
@@ -1207,7 +1209,7 @@ static int do_docode2(node *n,int flags)
 	  emit0(F_COPY_VALUE);
       }
     }
-    return tmp1;
+    return DO_NOT_WARN((INT32)tmp1);
 
   case F_CONSTANT:
     switch(n->u.sval.type)
@@ -1223,7 +1225,7 @@ static int do_docode2(node *n,int flags)
 
     case T_STRING:
       tmp1=store_prog_string(n->u.sval.u.string);
-      emit1(F_STRING,tmp1);
+      emit1(F_STRING, DO_NOT_WARN((INT32)tmp1));
       return 1;
 
     case T_FUNCTION:
@@ -1258,7 +1260,7 @@ static int do_docode2(node *n,int flags)
       tmp1=store_constant(&(n->u.sval),
 			  !(n->tree_info & OPT_EXTERNAL_DEPEND),
 			  n->name);
-      emit1(F_CONSTANT,tmp1);
+      emit1(F_CONSTANT, DO_NOT_WARN((INT32)tmp1));
       return 1;
 
     case T_ARRAY:
@@ -1267,7 +1269,7 @@ static int do_docode2(node *n,int flags)
       tmp1=store_constant(&(n->u.sval),
 			  !(n->tree_info & OPT_EXTERNAL_DEPEND),
 			  n->name);
-      emit1(F_CONSTANT,tmp1);
+      emit1(F_CONSTANT, DO_NOT_WARN((INT32)tmp1));
       
       /* copy now or later ? */
       if(!(flags & DO_NOT_COPY) && !(n->tree_info & OPT_EXTERNAL_DEPEND))
diff --git a/src/encode.c b/src/encode.c
index e4a9901b52a3597d61d8b422f7614dc8a3e53fff..bc2bffed7af15d239e7fdd4884215f210d4f3ffa 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.66 2000/08/15 16:15:43 grubba Exp $");
+RCSID("$Id: encode.c,v 1.67 2000/08/16 10:50:42 grubba Exp $");
 
 /* #define ENCODE_DEBUG */
 
@@ -1595,7 +1595,7 @@ static INT32 my_decode(struct pike_string *tmp,
 
 /* Compatibilidy decoder */
 
-static unsigned char extract_char(char **v, INT32 *l)
+static unsigned char extract_char(char **v, ptrdiff_t *l)
 {
   if(!*l) error("Format error, not enough place for char.\n");
   else (*l)--;
@@ -1603,7 +1603,7 @@ static unsigned char extract_char(char **v, INT32 *l)
   return ((unsigned char *)(*v))[-1];
 }
 
-static ptrdiff_t extract_int(char **v, INT32 *l)
+static ptrdiff_t extract_int(char **v, ptrdiff_t *l)
 {
   INT32 j;
   ptrdiff_t i;
@@ -1619,7 +1619,7 @@ static ptrdiff_t extract_int(char **v, INT32 *l)
   return i;
 }
 
-static void rec_restore_value(char **v, INT32 *l)
+static void rec_restore_value(char **v, ptrdiff_t *l)
 {
   ptrdiff_t t, i;
 
diff --git a/src/gc.c b/src/gc.c
index 2a42be9988062475962cefde256d5cd8f976072f..d9f46401bb543be523a89adc379502cf63f0cd6a 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -30,7 +30,7 @@ struct callback *gc_evaluator_callback=0;
 
 #include "block_alloc.h"
 
-RCSID("$Id: gc.c,v 1.121 2000/08/13 15:12:55 grubba Exp $");
+RCSID("$Id: gc.c,v 1.122 2000/08/16 10:35:48 grubba Exp $");
 
 /* Run garbage collect approximately every time
  * 20 percent of all arrays, objects and programs is
@@ -599,6 +599,16 @@ int debug_gc_check(void *x, TYPE_T t, void *data)
   return ret;
 }
 
+/* Avoid loss of precision warning. */
+#ifdef __ECL
+static inline long SIZE_T_TO_LONG(size_t x)
+{
+  return DO_NOT_WARN((long)x);
+}
+#else /* !__ECL */
+#define SIZE_T_TO_LONG(x)	((long)(x))
+#endif /* __ECL */
+
 void low_describe_something(void *a,
 			    int t,
 			    int indent,
@@ -684,7 +694,7 @@ void low_describe_something(void *a,
 	  foo=1;
 	  break;
 	}
-	if(pos+1>=(long)p->num_program)
+	if(pos+1>=(ptrdiff_t)p->num_program)
 	  break;
       }
 #if 0
@@ -709,7 +719,7 @@ void low_describe_something(void *a,
       {
 #define FOO(NUMTYPE,TYPE,NAME) \
       fprintf(stderr, "%*s* " #NAME " %p[%ld]\n", \
-              indent, "", p->NAME, (long)p->PIKE_CONCAT(num_,NAME));
+              indent, "", p->NAME, SIZE_T_TO_LONG(p->PIKE_CONCAT(num_,NAME)));
 #include "program_areas.h"
       }
 
diff --git a/src/las.c b/src/las.c
index 73d40a10e94bfaf1c6a4d1b715a0d0a438fdb9b8..1db6710d529d39d8f033630ea9496e33a13c6b67 100644
--- a/src/las.c
+++ b/src/las.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: las.c,v 1.190 2000/08/15 17:35:24 grubba Exp $");
+RCSID("$Id: las.c,v 1.191 2000/08/16 10:20:23 grubba Exp $");
 
 #include "language.h"
 #include "interpret.h"
@@ -3718,7 +3718,7 @@ ptrdiff_t eval_low(node *n)
 
   num_strings=Pike_compiler->new_program->num_strings;
   num_constants=Pike_compiler->new_program->num_constants;
-  jump=PC;
+  jump = DO_NOT_WARN((INT32)PC);
 
   store_linenumbers=0;
   docode(dmalloc_touch(node *, n));
@@ -3972,7 +3972,8 @@ int dooptcode(struct pike_string *name,
 
 #ifdef PIKE_DEBUG
   if(a_flag > 1)
-    fprintf(stderr,"Doing function '%s' at %x\n",name->str,PC);
+    fprintf(stderr, "Doing function '%s' at %lx\n", name->str,
+	    DO_NOT_WARN((unsigned long)PC));
 #endif
 
   args=count_arguments(type);
diff --git a/src/module_support.c b/src/module_support.c
index a4202915ff2ed96957b1b4940386d043a91c8bbc..1c3e159dc27f425ea49d99a35ccacef1445a60dd 100644
--- a/src/module_support.c
+++ b/src/module_support.c
@@ -6,7 +6,7 @@
 #include "pike_types.h"
 #include "error.h"
 
-RCSID("$Id: module_support.c,v 1.35 2000/08/11 13:35:00 grubba Exp $");
+RCSID("$Id: module_support.c,v 1.36 2000/08/16 10:27:34 grubba Exp $");
 
 /* Checks that args_to_check arguments are OK.
  * Returns 1 if everything worked ok, zero otherwise.
@@ -192,7 +192,7 @@ int va_get_args(struct svalue *s,
       if(s->type == T_INT)
 	 *va_arg(ap, INT_TYPE *)=s->u.integer;
       else if(s->type == T_FLOAT)
-        *va_arg(ap, INT_TYPE *)=(INT_TYPE)s->u.float_number;
+        *va_arg(ap, INT_TYPE *) = DO_NOT_WARN((INT_TYPE)s->u.float_number);
       else 
       {
         push_text( "int" );
diff --git a/src/peep.c b/src/peep.c
index 00cb6dca154b7e709e2775b3f59dc232644b0979..6983e18a1adb83dded48257e12e164b528c937ba 100644
--- a/src/peep.c
+++ b/src/peep.c
@@ -15,7 +15,7 @@
 #include "bignum.h"
 #include "opcodes.h"
 
-RCSID("$Id: peep.c,v 1.34 2000/08/14 17:18:06 grubba Exp $");
+RCSID("$Id: peep.c,v 1.35 2000/08/16 10:17:52 grubba Exp $");
 
 struct p_instr_s
 {
@@ -311,7 +311,8 @@ void assemble(void)
 #ifdef PIKE_DEBUG
     if((a_flag > 2 && store_linenumbers) || a_flag > 3)
     {
-      fprintf(stderr,"===%3d %4x ",c->line,PC);
+      fprintf(stderr, "===%3d %4lx ", c->line,
+	      DO_NOT_WARN((unsigned long)PC));
       dump_instr(c);
       fprintf(stderr,"\n");
     }
@@ -346,7 +347,7 @@ void assemble(void)
       if(labels[c->arg] != -1)
 	fatal("Duplicate label!\n");
 #endif
-      labels[c->arg]=PC;
+      labels[c->arg] = DO_NOT_WARN((INT32)PC);
       break;
 
     default:
@@ -359,7 +360,7 @@ void assemble(void)
 #ifdef PIKE_DEBUG
 	if(c->arg > max_label || c->arg < 0) fatal("Jump to unknown label?\n");
 #endif
-	tmp=PC;
+	tmp = DO_NOT_WARN((INT32)PC);
 	ins_int(jumps[c->arg], (void(*)(char))add_to_program);
 	jumps[c->arg]=tmp;
 	break;
diff --git a/src/pike_memory.h b/src/pike_memory.h
index f09a5c34a560bd52959acd100ec17caec2691f05..e2cfc8c43280b555ed353ce888c8b3c58090a613 100644
--- a/src/pike_memory.h
+++ b/src/pike_memory.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_memory.h,v 1.21 2000/08/15 15:55:35 grubba Exp $
+ * $Id: pike_memory.h,v 1.22 2000/08/16 10:28:17 grubba Exp $
  */
 #ifndef MEMORY_H
 #define MEMORY_H
@@ -51,7 +51,7 @@ struct generic_mem_searcher
     {
       enum methods method;
       void *needle;
-      SIZE_T needlelen;
+      size_t needlelen;
       int first_char;
     } other;
   } data;
diff --git a/src/pike_types.c b/src/pike_types.c
index 6a845eafa9def821cb37395ce61766c8d7af67bb..ae124f1a53abd48b76a12388a8c8f044eccd9081 100644
--- a/src/pike_types.c
+++ b/src/pike_types.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: pike_types.c,v 1.134 2000/08/15 16:01:14 grubba Exp $");
+RCSID("$Id: pike_types.c,v 1.135 2000/08/16 10:30:46 grubba Exp $");
 #include <ctype.h>
 #include "svalue.h"
 #include "pike_types.h"
@@ -235,16 +235,16 @@ void type_stack_pop_to_mark(void)
 
 void type_stack_reverse(void)
 {
-  INT32 a;
+  ptrdiff_t a;
   a=pop_stack_mark();
   reverse((char *)(Pike_compiler->type_stackp-a),a,1);
 }
 
 void push_type_int(INT32 i)
 {
-  int e;
-  for(e=0;e<(int)sizeof(i);e++)
-    push_type( (i>>(e*8)) & 0xff );
+  ptrdiff_t e;
+  for(e = 0; e < (ptrdiff_t)sizeof(i); e++)
+    push_type(DO_NOT_WARN((unsigned char)((i>>(e*8)) & 0xff)));
 }
 
 void push_type_int_backwards(INT32 i)
@@ -265,7 +265,7 @@ INT32 extract_type_int(char *p)
 
 void push_unfinished_type(char *s)
 {
-  int e;
+  ptrdiff_t e;
   e=type_length(s);
   for(e--;e>=0;e--) push_type(s[e]);
 }
@@ -336,7 +336,7 @@ void push_finished_type_backwards(struct pike_string *type)
 
 struct pike_string *debug_pop_unfinished_type(void)
 {
-  int len,e;
+  ptrdiff_t len, e;
   struct pike_string *s;
   len=pop_stack_mark();
   s=begin_shared_string(len);
diff --git a/src/pike_types.h b/src/pike_types.h
index 60f3f12b6e1bfc4d2a5f96be4d1979bbd5ad72a6..89847070eff2d44632cd6ddf6a93b29d8ab95f27 100644
--- a/src/pike_types.h
+++ b/src/pike_types.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_types.h,v 1.43 2000/08/15 15:59:49 grubba Exp $
+ * $Id: pike_types.h,v 1.44 2000/08/16 10:26:51 grubba Exp $
  */
 #ifndef PIKE_TYPES_H
 #define PIKE_TYPES_H
@@ -103,8 +103,8 @@ extern struct pike_string *weak_type_string;
 #ifdef PIKE_DEBUG
 #define init_type_stack() type_stack_mark()
 #define exit_type_stack() do {\
-  int q_q_q_q=pop_stack_mark(); \
-  if(q_q_q_q) fatal("Type stack out of wack! %d\n",q_q_q_q); \
+    ptrdiff_t q_q_q_q = pop_stack_mark(); \
+    if(q_q_q_q) fatal("Type stack out of wack! %d\n", q_q_q_q); \
   } while(0)
 #else
 #define init_type_stack type_stack_mark
diff --git a/src/program.c b/src/program.c
index adeb3f44406bd11f78d43f1871c6d4373b98583b..67108cdd5a58081b56c1543332b78f75db2ea532 100644
--- a/src/program.c
+++ b/src/program.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: program.c,v 1.261 2000/08/15 15:52:55 grubba Exp $");
+RCSID("$Id: program.c,v 1.262 2000/08/16 10:25:52 grubba Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -529,7 +529,7 @@ char *find_program_name(struct program *p, INT32 *line)
 #ifdef DEBUG_MALLOC
   char *tmp;
 #endif
-  INT32 pos;
+  ptrdiff_t pos;
   INT32 l;
   if(!line) line=&l;
 
@@ -545,7 +545,7 @@ char *find_program_name(struct program *p, INT32 *line)
   {
     char *tmp=get_line(p->program+pos, p, line);
     if(tmp && *line) return tmp;
-    if(pos+1>=(long)p->num_program) break;
+    if(pos+1 >= (ptrdiff_t)p->num_program) break;
   }
   *line=0;
   return 0;
@@ -3075,10 +3075,10 @@ void store_linenumber(INT32 current_line, struct pike_string *current_file)
       add_to_linenumbers(0);
       copy_shared_string(Pike_compiler->last_file, current_file);
     }
-    insert_small_number(PC-Pike_compiler->last_pc);
+    insert_small_number(DO_NOT_WARN((INT32)(PC-Pike_compiler->last_pc)));
     insert_small_number(current_line-Pike_compiler->last_line);
     Pike_compiler->last_line=current_line;
-    Pike_compiler->last_pc=PC;
+    Pike_compiler->last_pc = DO_NOT_WARN((INT32)PC);
   }
 }
 
@@ -3113,7 +3113,7 @@ PMOD_EXPORT char *get_line(unsigned char *pc,struct program *prog,INT32 *linep)
     pid=prog->id;
   }
 
-  if (offset > (INT32)prog->num_program || offset<0)
+  if ((offset > (ptrdiff_t)prog->num_program) || (offset < 0))
     return file;
 
   while(cnt < prog->linenumbers + prog->num_linenumbers)
@@ -3861,7 +3861,8 @@ void pop_compiler_frame(void)
 #define GET_STORAGE_CACHE_SIZE 1024
 static struct get_storage_cache
 {
-  INT32 oid, pid, offset;
+  INT32 oid, pid;
+  ptrdiff_t offset;
 } get_storage_cache[GET_STORAGE_CACHE_SIZE];
 
 ptrdiff_t low_get_storage(struct program *o, struct program *p)
@@ -3905,7 +3906,7 @@ ptrdiff_t low_get_storage(struct program *o, struct program *p)
 
 PMOD_EXPORT char *get_storage(struct object *o, struct program *p)
 {
-  int offset;
+  ptrdiff_t offset;
 
 #ifdef _REENTRANT
   if(d_flag) CHECK_INTERPRETER_LOCK();