diff --git a/src/mapping.c b/src/mapping.c
index c45c59e52876d3bc2dee4840cead6591a2351e28..dce0637a06046be084f6fc6e53e5baff525876c7 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -554,8 +554,10 @@ static struct mapping *rehash(struct mapping *m, int new_size)
   }
 
 #ifdef PIKE_DEBUG
-  if(m->data->size != tmp)
-    Pike_fatal("Rehash failed, size not same any more.\n");
+  if((m->data->size != tmp) &&
+     ((m->data->size > tmp) || !(m->data->flags & MAPPING_WEAK)))
+    Pike_fatal("Rehash failed, size not same any more (%ld != %ld).\n",
+	       (long)m->data->size, (long)tmp);
 #endif
 #ifdef MAPPING_SIZE_DEBUG
   m->debug_size = m->data->size;