GCC was complaining that 'value' in dictiter_iternextvalue() wasn't
necessarily always set before used.  Between Tim, Armin & me we
couldn't prove GCC wrong, so we decided to fix the algorithm.  This
version is Armin's.
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 3e36961..0f2a271 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -2148,15 +2148,16 @@
 	}
 
 	i = di->di_pos;
-	if (i < 0)
+	mask = d->ma_mask;
+	if (i < 0 || i > mask)
 		goto fail;
 	ep = d->ma_table;
-	mask = d->ma_mask;
-	while (i <= mask && (value=ep[i].me_value) == NULL)
+	while ((value=ep[i].me_value) == NULL) {
 		i++;
+		if (i > mask)
+			goto fail;
+	}
 	di->di_pos = i+1;
-	if (i > mask)
-		goto fail;
 	di->len--;
 	Py_INCREF(value);
 	return value;