diff --git a/src/mapping.c b/src/mapping.c
index 43afd10c8e47790b1ae734a427af5438bb61d9d8..321dabaa11d9af095941e4ad2f80dbca559f9200 100644
--- a/src/mapping.c
+++ b/src/mapping.c
@@ -340,13 +340,13 @@ static void mapping_rehash_backwards_evil(struct mapping_data *md,
       default:
 	Pike_fatal("Instable mapping data flags.\n");
       case MAPPING_WEAK_INDICES:
-	if (REFCOUNTED_TYPE(TYPEOF(from->ind)) &&
+	if (!REFCOUNTED_TYPE(TYPEOF(from->ind)) ||
 	    (*from->ind.u.refs > 1)) {
 	  goto keep_keypair;
 	}
 	break;
       case MAPPING_WEAK_VALUES:
-	if (REFCOUNTED_TYPE(TYPEOF(from->val)) &&
+	if (!REFCOUNTED_TYPE(TYPEOF(from->val)) ||
 	    (*from->val.u.refs > 1)) {
 	  goto keep_keypair;
 	}