diff --git a/src/gc.c b/src/gc.c
index 235d4937b2b0fc676c7dd6070b44ad6cab67d3f9..99a5dab83cde27517c16c0e000f5a5aecd7b8206 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.115 2000/08/10 13:34:36 grubba Exp $");
+RCSID("$Id: gc.c,v 1.116 2000/08/11 13:08:02 grubba Exp $");
 
 /* Run garbage collect approximately every time
  * 20 percent of all arrays, objects and programs is
@@ -229,7 +229,8 @@ void dump_gc_info(void)
   fprintf(stderr," threshold for next gc() : %ld\n",(long)alloc_threshold);
   fprintf(stderr,"Average allocs per gc()  : %f\n",objects_alloced);
   fprintf(stderr,"Average frees per gc()   : %f\n",objects_freed);
-  fprintf(stderr,"Second since last gc()   : %ld\n", (long)TIME(0) - (long)last_gc);
+  fprintf(stderr,"Second since last gc()   : %ld\n",
+	  DO_NOT_WARN((long)TIME(0) - (long)last_gc));
   fprintf(stderr,"Projected garbage        : %f\n", objects_freed * (double) num_allocs / (double) alloc_threshold);
   fprintf(stderr,"in_gc                    : %d\n", Pike_in_gc);
 }
@@ -318,7 +319,7 @@ void describe_location(void *real_memblock,
 	    indent,"",
 	    get_name_of_type(type),
 	    memblock,
-	    (long)((char *)location - (char *)memblock));
+	    DO_NOT_WARN((long)((char *)location - (char *)memblock)));
   else
     fprintf(stderr,"%*s-> at location %p in unknown memblock (mmaped?)\n",
 	    indent,"",
@@ -364,7 +365,7 @@ void describe_location(void *real_memblock,
       {
 	e=((char *)ptr - (char *)(p->inherits)) / sizeof(struct inherit);
 	fprintf(stderr,"%*s  **In p->inherits[%ld] (%s)\n",indent,"",
-		e,
+		DO_NOT_WARN((long)e),
 		p->inherits[e].name ? p->inherits[e].name->str : "no name");
 	break;
       }
@@ -376,7 +377,7 @@ void describe_location(void *real_memblock,
 	e = ((char *)ptr - (char *)(p->constants)) /
 	  sizeof(struct program_constant);
 	fprintf(stderr,"%*s  **In p->constants[%ld] (%s)\n",indent,"",
-		e,
+		DO_NOT_WARN((long)e),
 		p->constants[e].name ? p->constants[e].name->str : "no name");
 	break;
       }
@@ -389,7 +390,7 @@ void describe_location(void *real_memblock,
 	e = ((char *)ptr - (char *)(p->identifiers)) /
 	  sizeof(struct identifier);
 	fprintf(stderr,"%*s  **In p->identifiers[%ld] (%s)\n",indent,"",
-		e,
+		DO_NOT_WARN((long)e),
 		p->identifiers[e].name ? p->identifiers[e].name->str : "no name");
 	break;
       }
diff --git a/src/modules/Regexp/pike_regexp.c b/src/modules/Regexp/pike_regexp.c
index fe5d5ebaf57df439ed7330d3a7c2ea4714d7d9ef..8c3d21f6ed32e6bfddb0d13d3334ea23b60b93f6 100644
--- a/src/modules/Regexp/pike_regexp.c
+++ b/src/modules/Regexp/pike_regexp.c
@@ -1,5 +1,5 @@
 /* 
- * $Id: pike_regexp.c,v 1.14 2000/07/28 07:14:40 hubbe Exp $
+ * $Id: pike_regexp.c,v 1.15 2000/08/11 13:04:22 grubba Exp $
  *
  * regexp.c - regular expression matching
  *
@@ -254,7 +254,7 @@ regexp *pike_regcomp(char *exp,int excompat)
     register regexp *r;
     register char  *scan;
     register char  *longest;
-    register int    len;
+    register size_t len;
     int             flags;
     short	   *exp2,*dest,c;
 
@@ -357,7 +357,7 @@ regexp *pike_regcomp(char *exp,int excompat)
 	    len = 0;
 	    for (; scan != NULL; scan = regnext(scan))
 		if (OP(scan) == EXACTLY &&
-		    (int)strlen(OPERAND(scan)) >= len) {
+		    strlen(OPERAND(scan)) >= len) {
 		    longest = OPERAND(scan);
 		    len = strlen(OPERAND(scan));
 		}
@@ -713,9 +713,9 @@ static void reginsert(char op, char *opnd)
  */
 static void regtail(char *p, char *val)
 {
-    register char  *scan;
-    register char  *temp;
-    register int    offset;
+    register char      *scan;
+    register char      *temp;
+    register ptrdiff_t  offset;
 
     if (p == &regdummy)
 	return;
@@ -733,8 +733,8 @@ static void regtail(char *p, char *val)
 	offset = scan - val;
     else
 	offset = val - scan;
-    *(scan + 1) = (offset >> 8) & 0377;
-    *(scan + 2) = offset & 0377;
+    *(scan + 1) = DO_NOT_WARN((offset >> 8) & 0377);
+    *(scan + 2) = DO_NOT_WARN(offset & 0377);
 }
 
 /*
@@ -765,7 +765,7 @@ static char   **regendp;	/* Ditto for endp. */
  */
 STATIC int      regtry(regexp *, char *);
 STATIC int      regmatch(char *);
-STATIC int      regrepeat(char *);
+STATIC size_t   regrepeat(char *);
 
 #ifdef PIKE_DEBUG
 int             regnarrate = 0;
@@ -932,7 +932,7 @@ char           *prog;
 		return (0);
 	    break;
 	case EXACTLY:{
-		register int    len;
+		register size_t len;
 		register char  *opnd;
 
 		opnd = OPERAND(scan);
@@ -982,7 +982,7 @@ char           *prog;
 	    break;
 	case STAR:{
 		register char   nextch;
-		register int    no;
+		register size_t no;
 		register char  *save;
 		register int    minimum;
 
@@ -995,8 +995,8 @@ char           *prog;
 		    nextch = *OPERAND(nxt);
 		minimum = (OP(scan) == STAR) ? 0 : 1;
 		save = reginput;
-		no = regrepeat(OPERAND(scan));
-		while (no >= minimum) {
+		no = regrepeat(OPERAND(scan)) + (minimum == 0);
+		while (no) {
 		    /* If it could work, try it. */
 		    if (nextch == '\0' || *reginput == nextch)
 			if (regmatch(nxt))
@@ -1072,16 +1072,16 @@ char           *prog;
  */
 #ifdef __STDC__
 
-static int regrepeat(char *p)
+static size_t regrepeat(char *p)
 
 #else
 
-static int regrepeat(p)
+static size_t regrepeat(p)
 char           *p;
 
 #endif
 {
-    register int    count = 0;
+    register size_t count = 0;
     register char  *scan;
     register char  *opnd;
 
@@ -1175,12 +1175,15 @@ regexp         *r;
     s = r->program + 1;
     while (op != END) {		/* While that wasn't END last time... */
 	op = OP(s);
-	printf("%2ld%s", (long)(s - r->program), regprop(s));	/* Where, what. */
+	printf("%2ld%s",	/* Where, what. */
+	       DO_NOT_WARN((long)(s - r->program)),
+	       regprop(s));
 	nxt = regnext(s);
 	if (nxt == (char *)NULL)	/* nxt ptr. */
 	    printf("(0)");
 	else
-	    printf("(%ld)", (long)( (s - r->program) + (nxt - s)));
+	    printf("(%ld)",
+		   DO_NOT_WARN((long)( (s - r->program) + (nxt - s))));
 	s += 3;
 	if (op == ANYOF || op == ANYBUT || op == EXACTLY) {
 	    /* Literal string, where present. */
@@ -1291,7 +1294,7 @@ char *pike_regsub(regexp *prog, char *source, char *dest, int n)
     register char  *dst;
     register char   c;
     register int    no;
-    register int    len;
+    register ptrdiff_t len;
 
     if (prog == (regexp *)NULL || 
 	source == (char *)NULL || dest == (char *)NULL) {
diff --git a/src/modules/Regexp/pike_regexp.h b/src/modules/Regexp/pike_regexp.h
index a9d67be6f0a5064cca499ecd391ec359a8ba09e8..5aadaa672104478ee0ff222e9c88489f548ab855 100644
--- a/src/modules/Regexp/pike_regexp.h
+++ b/src/modules/Regexp/pike_regexp.h
@@ -3,10 +3,11 @@
 ||| Pike is distributed as GPL (General Public License)
 ||| See the files COPYING and DISCLAIMER for more information.
 \*/
+/**/
 #ifndef REGEXP_H
 #define REGEXP_H
 /*
- * $Id: pike_regexp.h,v 1.3 1998/03/28 14:35:36 grubba Exp $
+ * $Id: pike_regexp.h,v 1.4 2000/08/11 13:04:32 grubba Exp $
  *
  * Definitions etc. for regexp(3) routines.
  *
@@ -22,7 +23,7 @@ typedef struct regexp
   char regstart;		/* Internal use only. */
   char reganch;			/* Internal use only. */
   char *regmust;		/* Internal use only. */
-  int regmlen;			/* Internal use only. */
+  size_t regmlen;		/* Internal use only. */
   char program[1];		/* Unwarranted chumminess with compiler. */
 } regexp;