diff --git a/src/opcodes.c b/src/opcodes.c
index 96bfca6693759c90119daa4b1f6df289edcc0f86..b349a35aa91640c575591095ddacf83301574bf8 100644
--- a/src/opcodes.c
+++ b/src/opcodes.c
@@ -26,7 +26,7 @@
 #include "bignum.h"
 #include "operators.h"
 
-RCSID("$Id: opcodes.c,v 1.84 2000/08/13 19:34:34 grubba Exp $");
+RCSID("$Id: opcodes.c,v 1.85 2000/08/14 20:29:14 grubba Exp $");
 
 void index_no_free(struct svalue *to,struct svalue *what,struct svalue *ind)
 {
@@ -666,13 +666,13 @@ struct sscanf_set
 
 
 #define MKREADSET(SIZE)						\
-static int PIKE_CONCAT(read_set,SIZE) (				\
+static ptrdiff_t PIKE_CONCAT(read_set,SIZE) (			\
   PIKE_CONCAT(p_wchar,SIZE) *match,				\
-  int cnt,							\
+  ptrdiff_t cnt,						\
   struct sscanf_set *set,					\
-  int match_len)						\
+  ptrdiff_t match_len)						\
 {								\
-  unsigned long e,last=0;					\
+  size_t e, last = 0;						\
   CHAROPT( int set_size=0; )					\
 								\
   if(cnt>=match_len)						\
@@ -717,15 +717,15 @@ static int PIKE_CONCAT(read_set,SIZE) (				\
 	error("Error in sscanf format string.\n");		\
 								\
 CHAROPT(							\
-      if(last < (unsigned long)sizeof(set->c))			\
+      if(last < (size_t)sizeof(set->c))				\
       {								\
-	if(match[cnt] < (unsigned long)sizeof(set->c))		\
+	if(match[cnt] < (size_t)sizeof(set->c))			\
 	{							\
 )								\
 	  for(e=last;e<=match[cnt];e++) set->c[e]=1;		\
 CHAROPT(							\
 	}else{							\
-	  for(e=last;e<(unsigned long)sizeof(set->c);e++)	\
+	  for(e=last;e<(size_t)sizeof(set->c);e++)		\
             set->c[e]=1;					\
 								\
 	  check_stack(2);					\
@@ -742,12 +742,12 @@ CHAROPT(							\
       continue;							\
     }								\
     last=match[cnt];						\
-    if(last < (unsigned long)sizeof(set->c))			\
+    if(last < (size_t)sizeof(set->c))				\
       set->c[last]=1;						\
 CHAROPT(							\
     else{							\
       if(set_size &&						\
-	 ((unsigned long)sp[-1].u.integer) == last-1)		\
+	 ((size_t)sp[-1].u.integer) == last-1)			\
       {								\
 	sp[-1].u.integer++;					\
       }else{							\
@@ -766,7 +766,7 @@ CHAROPT(							\
     INT32 *order;						\
     set->a=aggregate_array(set_size*2);				\
     order=get_switch_order(set->a);				\
-    for(e=0;e<(unsigned long)set->a->size;e+=2)			\
+    for(e=0;e<(size_t)set->a->size;e+=2)			\
     {								\
       if(order[e]+1 != order[e+1])				\
       {								\
@@ -940,7 +940,7 @@ static INLINE FLOAT_TYPE low_parse_IEEE_float(char *b, int sz)
 	      ((char *)&d)[5] = *((INPUT)+5);		\
 	      ((char *)&d)[6] = *((INPUT)+6);		\
 	      ((char *)&d)[7] = *((INPUT)+7);		\
-	      (SVAL).u.float_number = (float)d;		\
+	      (SVAL).u.float_number = (FLOAT_TYPE)d;	\
 	    } while(0)
 #else
 #ifdef DOUBLE_IS_IEEE_LITTLE
@@ -955,7 +955,7 @@ static INLINE FLOAT_TYPE low_parse_IEEE_float(char *b, int sz)
 	      ((char *)&d)[2] = *((INPUT)+5);		\
 	      ((char *)&d)[1] = *((INPUT)+6);		\
 	      ((char *)&d)[0] = *((INPUT)+7);		\
-	      (SVAL).u.float_number = (float)d;		\
+	      (SVAL).u.float_number = (FLOAT_TYPE)d;	\
 	    } while(0)
 #else
 #define EXTRACT_DOUBLE(SVAL, INPUT, SHIFT)				\
@@ -985,8 +985,8 @@ static INT32 PIKE_CONCAT4(very_low_sscanf_,INPUT_SHIFT,_,MATCH_SHIFT)(	 \
 {									 \
   struct svalue sval;							 \
   INT32 matches, arg;							 \
-  ptrdiff_t cnt, eye, e;						 \
-  int no_assign = 0, field_length = 0, minus_flag = 0;			 \
+  ptrdiff_t cnt, eye, e, field_length = 0;				 \
+  int no_assign = 0, minus_flag = 0;					 \
   struct sscanf_set set;						 \
   struct svalue *argp;							 \
 									 \
diff --git a/src/program.c b/src/program.c
index 10c08c376f7b27c534e04416bf4e1b596b0dfdd2..b882b72018c33c4a01b1f7f74d618c0185ea68c7 100644
--- a/src/program.c
+++ b/src/program.c
@@ -5,7 +5,7 @@
 \*/
 /**/
 #include "global.h"
-RCSID("$Id: program.c,v 1.258 2000/08/10 17:51:34 grubba Exp $");
+RCSID("$Id: program.c,v 1.259 2000/08/14 20:19:20 grubba Exp $");
 #include "program.h"
 #include "object.h"
 #include "dynamic_buffer.h"
@@ -517,8 +517,10 @@ void optimize_program(struct program *p)
 int program_function_index_compare(const void *a,const void *b)
 {
   return
-    my_order_strcmp(ID_FROM_INT(Pike_compiler->new_program, *(unsigned short *)a)->name,
-		    ID_FROM_INT(Pike_compiler->new_program, *(unsigned short *)b)->name);
+    DO_NOT_WARN((int)my_order_strcmp(ID_FROM_INT(Pike_compiler->new_program,
+						 *(unsigned short *)a)->name,
+				     ID_FROM_INT(Pike_compiler->new_program,
+						 *(unsigned short *)b)->name));
 }
 
 #ifdef PIKE_DEBUG
@@ -1382,7 +1384,8 @@ PMOD_EXPORT struct program *debug_end_program(void)
  * Allocate needed for this program in the object structure.
  * An offset to the data is returned.
  */
-PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment, int modulo_orig)
+PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment,
+				   ptrdiff_t modulo_orig)
 {
   ptrdiff_t offset;
   ptrdiff_t modulo;
@@ -1420,7 +1423,8 @@ PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment, int modulo_ori
   }
 
   if(Pike_compiler->new_program->alignment_needed<alignment)
-    Pike_compiler->new_program->alignment_needed=alignment;
+    Pike_compiler->new_program->alignment_needed =
+      DO_NOT_WARN((unsigned INT8)alignment);
 
 #ifdef PIKE_DEBUG
   if(offset < Pike_compiler->new_program->storage_needed)
@@ -1437,7 +1441,7 @@ PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment, int modulo_ori
 
   Pike_compiler->new_program->storage_needed = offset + size;
 
-  return (SIZE_T) offset;
+  return (size_t) offset;
 }
 
 
diff --git a/src/program.h b/src/program.h
index 6b812b6f8f8144fa16d2c6605ad93b00f4f6f2ce..982412fb87aec966c0ab249be17874bea1301a42 100644
--- a/src/program.h
+++ b/src/program.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: program.h,v 1.101 2000/08/14 20:09:58 grubba Exp $
+ * $Id: program.h,v 1.102 2000/08/14 20:19:20 grubba Exp $
  */
 #ifndef PROGRAM_H
 #define PROGRAM_H
@@ -201,7 +201,7 @@ struct inherit
   INT16 identifier_level;
   INT16 parent_identifier;
   INT16 parent_offset;
-  INT32 storage_offset;
+  ptrdiff_t storage_offset;
   struct object *parent;
   struct program *prog;
   struct pike_string *name;
@@ -264,7 +264,7 @@ struct program
    * the first inherit[0].storage_offset bytes are not used and are
    * subtracted when inheriting.
    */
-  INT32 storage_needed; /* storage needed in the object struct */
+  ptrdiff_t storage_needed; /* storage needed in the object struct */
   INT16 flags;          /* PROGRAM_* */
   unsigned INT8 alignment_needed;
   struct timeval timestamp;
@@ -352,7 +352,8 @@ int sizeof_variable(int run_time_type);
 void check_program(struct program *p);
 struct program *end_first_pass(int finish);
 PMOD_EXPORT struct program *debug_end_program(void);
-PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment, int modulo_orig);
+PMOD_EXPORT size_t low_add_storage(size_t size, size_t alignment,
+				   ptrdiff_t modulo_orig);
 PMOD_EXPORT void set_init_callback(void (*init)(struct object *));
 PMOD_EXPORT void set_exit_callback(void (*exit)(struct object *));
 PMOD_EXPORT void set_gc_recurse_callback(void (*m)(struct object *));