diff --git a/base/third_party/dmg_fp/dtoa.cc b/base/third_party/dmg_fp/dtoa.cc
index 3312fa4..502c16c 100644
--- a/base/third_party/dmg_fp/dtoa.cc
+++ b/base/third_party/dmg_fp/dtoa.cc
@@ -548,8 +548,10 @@ Balloc
 	ACQUIRE_DTOA_LOCK(0);
 	/* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */
 	/* but this case seems very unlikely. */
-	if (k <= Kmax && (rv = freelist[k]))
+	if (k <= Kmax && freelist[k]) {
+		rv = freelist[k];
 		freelist[k] = rv->next;
+		}
 	else {
 		x = 1 << k;
 #ifdef Omit_Private_Memory
@@ -650,7 +652,7 @@ multadd
 			Bfree(b);
 			b = b1;
 			}
-		b->x[wds++] = carry;
+		b->x[wds++] = (ULong)carry;
 		b->wds = wds;
 		}
 	return b;
@@ -834,7 +836,8 @@ mult
 	xc0 = c->x;
 #ifdef ULLong
 	for(; xb < xbe; xc0++) {
-		if ((y = *xb++)) {
+		y = *xb++;
+		if (y) {
 			x = xa;
 			xc = xc0;
 			carry = 0;
@@ -844,7 +847,7 @@ mult
 				*xc++ = z & FFFFFFFF;
 				}
 				while(x < xae);
-			*xc = carry;
+			*xc = (ULong)carry;
 			}
 		}
 #else
@@ -916,16 +919,19 @@ pow5mult
 	int i;
 	static int p05[3] = { 5, 25, 125 };
 
-	if ((i = k & 3))
+	i = k & 3;
+	if (i)
 		b = multadd(b, p05[i-1], 0);
 
 	if (!(k >>= 2))
 		return b;
-	if (!(p5 = p5s)) {
+	p5 = p5s;
+	if (!p5) {
 		/* first time */
 #ifdef MULTIPLE_THREADS
 		ACQUIRE_DTOA_LOCK(1);
-		if (!(p5 = p5s)) {
+		p5 = p5s;
+		if (!p5) {
 			p5 = p5s = i2b(625);
 			p5->next = 0;
 			}
@@ -943,10 +949,12 @@ pow5mult
 			}
 		if (!(k >>= 1))
 			break;
-		if (!(p51 = p5->next)) {
+		p51 = p5->next;
+		if (!p51) {
 #ifdef MULTIPLE_THREADS
 			ACQUIRE_DTOA_LOCK(1);
-			if (!(p51 = p5->next)) {
+			p51 = p5->next;
+			if (!p51) {
 				p51 = p5->next = mult(p5,p5);
 				p51->next = 0;
 				}
@@ -997,7 +1005,8 @@ lshift
 			z = *x++ >> k1;
 			}
 			while(x < xe);
-		if ((*x1 = z))
+		*x1 = z;
+		if (*x1)
 			++n1;
 		}
 #else
@@ -1299,21 +1308,25 @@ d2b
 	z |= Exp_msk11;
 #endif
 #else
-	if ((de = (int)(d0 >> Exp_shift)))
+	de = (int)(d0 >> Exp_shift);
+	if (de)
 		z |= Exp_msk1;
 #endif
 #ifdef Pack_32
-	if ((y = d1)) {
-		if ((k = lo0bits(&y))) {
+	y = d1;
+	if (y) {
+		k = lo0bits(&y);
+		if (k) {
 			x[0] = y | z << (32 - k);
 			z >>= k;
 			}
 		else
 			x[0] = y;
+		x[1] = z;
+		b->wds = x[1] ? 2 : 1;
 #ifndef Sudden_Underflow
-		i =
+		i = b->wds;
 #endif
-		    b->wds = (x[1] = z) ? 2 : 1;
 		}
 	else {
 		k = lo0bits(&z);
@@ -1498,7 +1511,7 @@ htinit(unsigned char *h, unsigned char *s, int inc)
 {
 	int i, j;
 	for(i = 0; (j = s[i]) !=0; i++)
-		h[j] = i + inc;
+		h[j] = (unsigned char)(i + inc);
 	}
 
  static void
@@ -1536,7 +1549,7 @@ match
 	int c, d;
 	CONST char *s = *sp;
 
-	while((d = *t++)) {
+	for(d = *t++; d; d = *t++) {
 		if ((c = *++s) >= 'A' && c <= 'Z')
 			c += 'a' - 'A';
 		if (c != d)
@@ -1566,12 +1579,13 @@ hexnan
 	udx0 = 1;
 	s = *sp;
 	/* allow optional initial 0x or 0X */
-	while((c = *(CONST unsigned char*)(s+1)) && c <= ' ')
+	for(c = *(CONST unsigned char*)(s+1); c && c <= ' '; c = *(CONST unsigned char*)(s+1))
 		++s;
 	if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
 		s += 2;
-	while((c = *(CONST unsigned char*)++s)) {
-		if ((c1 = hexdig[c]))
+	for(c = *(CONST unsigned char*)++s; c; c = *(CONST unsigned char*)++s) {
+		c1 = hexdig[c];
+		if (c1)
 			c  = c1 & 0xf;
 		else if (c <= ' ') {
 			if (udx0 && havedig) {
@@ -1594,7 +1608,8 @@ hexnan
 					*sp = s + 1;
 					break;
 					}
-				} while((c = *++s));
+				c = *++s;
+				} while(c);
 			break;
 			}
 #endif
@@ -2328,7 +2343,8 @@ bigcomp
 	/* Now b/d = exactly half-way between the two floating-point values */
 	/* on either side of the input string.  Compute first digit of b/d. */
 
-	if (!(dig = quorem(b,d))) {
+	dig = quorem(b,d);
+	if (!dig) {
 		b = multadd(b, 10, 0);	/* very unlikely */
 		dig = quorem(b,d);
 		}
@@ -2336,7 +2352,8 @@ bigcomp
 	/* Compare b/d with s0 */
 
 	for(i = 0; i < nd0; ) {
-		if ((dd = s0[i++] - '0' - dig))
+		dd = s0[i++] - '0' - dig;
+		if (dd)
 			goto ret;
 		if (!b->x[0] && b->wds == 1) {
 			if (i < nd)
@@ -2347,7 +2364,8 @@ bigcomp
 		dig = quorem(b,d);
 		}
 	for(j = bc->dp1; i++ < nd;) {
-		if ((dd = s0[j++] - '0' - dig))
+		dd = s0[j++] - '0' - dig;
+		if (dd)
 			goto ret;
 		if (!b->x[0] && b->wds == 1) {
 			if (i < nd)
@@ -2747,7 +2765,8 @@ strtod
 	/* Get starting approximation = rv * 10**e1 */
 
 	if (e1 > 0) {
-		if ((i = e1 & 15))
+		i = e1 & 15;
+		if (i)
 			dval(&rv) *= tens[i];
 		if (e1 &= ~15) {
 			if (e1 > DBL_MAX_10_EXP) {
@@ -2805,7 +2824,8 @@ strtod
 		}
 	else if (e1 < 0) {
 		e1 = -e1;
-		if ((i = e1 & 15))
+		i = e1 & 15;
+		if (i)
 			dval(&rv) /= tens[i];
 		if (e1 >>= 4) {
 			if (e1 >= 1 << n_bigtens)
@@ -3283,7 +3303,7 @@ strtod
 #ifdef Avoid_Underflow
 			if (bc.scale && y <= 2*P*Exp_msk1) {
 				if (aadj <= 0x7fffffff) {
-					if ((z = aadj) <= 0)
+					if ((z = (ULong)aadj) <= 0)
 						z = 1;
 					aadj = z;
 					aadj1 = bc.dsign ? aadj : -aadj;
@@ -3456,7 +3476,7 @@ nrv_alloc(CONST char *s, char **rve, int n)
 	char *rv, *t;
 
 	t = rv = rv_alloc(n);
-	while((*t = *s++)) t++;
+	for(*t = *s++; *t; *t = *s++) t++;
 	if (rve)
 		*rve = t;
 	return rv;
@@ -3569,7 +3589,7 @@ dtoa
 	int denorm;
 	ULong x;
 #endif
-	Bigint *b, *b1, *delta, *mlo, *mhi, *S;
+	Bigint *b, *b1, *delta, *mlo = NULL, *mhi, *S;
 	U d2, eps, u;
 	double ds;
 	char *s, *s0;
@@ -3645,10 +3665,9 @@ dtoa
 #endif
 
 	b = d2b(&u, &be, &bbits);
-#ifdef Sudden_Underflow
 	i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
-#else
-	if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
+#ifndef Sudden_Underflow
+	if (i) {
 #endif
 		dval(&d2) = dval(&u);
 		word0(&d2) &= Frac_mask1;
@@ -3803,13 +3822,16 @@ dtoa
 					}
 			dval(&u) /= ds;
 			}
-		else if ((j1 = -k)) {
-			dval(&u) *= tens[j1 & 0xf];
-			for(j = j1 >> 4; j; j >>= 1, i++)
-				if (j & 1) {
-					ieps++;
-					dval(&u) *= bigtens[i];
-					}
+		else {
+			j1 = -k;
+			if (j1) {
+				dval(&u) *= tens[j1 & 0xf];
+				for(j = j1 >> 4; j; j >>= 1, i++)
+					if (j & 1) {
+						ieps++;
+						dval(&u) *= bigtens[i];
+						}
+				}
 			}
 		if (k_check && dval(&u) < 1. && ilim > 0) {
 			if (ilim1 <= 0)
@@ -3837,9 +3859,9 @@ dtoa
 			 */
 			dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
 			for(i = 0;;) {
-				L = dval(&u);
+				L = (long)dval(&u);
 				dval(&u) -= L;
-				*s++ = '0' + (int)L;
+				*s++ = '0' + (char)L;
 				if (dval(&u) < dval(&eps))
 					goto ret1;
 				if (1. - dval(&u) < dval(&eps))
@@ -3858,7 +3880,7 @@ dtoa
 				L = (Long)(dval(&u));
 				if (!(dval(&u) -= L))
 					ilim = i;
-				*s++ = '0' + (int)L;
+				*s++ = '0' + (char)L;
 				if (i == ilim) {
 					if (dval(&u) > 0.5 + dval(&eps))
 						goto bump_up;
@@ -3901,7 +3923,7 @@ dtoa
 				dval(&u) += ds;
 				}
 #endif
-			*s++ = '0' + (int)L;
+			*s++ = '0' + (char)L;
 			if (!dval(&u)) {
 #ifdef SET_INEXACT
 				inexact = 0;
@@ -3964,7 +3986,8 @@ dtoa
 				Bfree(b);
 				b = b1;
 				}
-			if ((j = b5 - m5))
+			j = b5 - m5;
+			if (j)
 				b = pow5mult(b, j);
 			}
 		else
@@ -4002,7 +4025,8 @@ dtoa
 	 * can do shifts and ors to compute the numerator for q.
 	 */
 #ifdef Pack_32
-	if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
+	i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f;
+	if (i)
 		i = 32 - i;
 #define iInc 28
 #else
@@ -4077,7 +4101,7 @@ dtoa
 				else if (!b->x[0] && b->wds <= 1)
 					inexact = 0;
 #endif
-				*s++ = dig;
+				*s++ = (char)dig;
 				goto ret;
 				}
 #endif
@@ -4107,7 +4131,7 @@ dtoa
 						goto round_9_up;
 					}
  accept_dig:
-				*s++ = dig;
+				*s++ = (char)dig;
 				goto ret;
 				}
 			if (j1 > 0) {
@@ -4120,13 +4144,13 @@ dtoa
 					*s++ = '9';
 					goto roundoff;
 					}
-				*s++ = dig + 1;
+				*s++ = (char)dig + 1;
 				goto ret;
 				}
 #ifdef Honor_FLT_ROUNDS
  keep_dig:
 #endif
-			*s++ = dig;
+			*s++ = (char)dig;
 			if (i == ilim)
 				break;
 			b = multadd(b, 10, 0);
@@ -4140,7 +4164,8 @@ dtoa
 		}
 	else
 		for(i = 1;; i++) {
-			*s++ = dig = quorem(b,S) + '0';
+			dig = quorem(b,S) + '0';
+			*s++ = (char)dig;
 			if (!b->x[0] && b->wds <= 1) {
 #ifdef SET_INEXACT
 				inexact = 0;
diff --git a/base/third_party/dmg_fp/g_fmt.cc b/base/third_party/dmg_fp/g_fmt.cc
index d864eb7..bfa358d 100644
--- a/base/third_party/dmg_fp/g_fmt.cc
+++ b/base/third_party/dmg_fp/g_fmt.cc
@@ -46,14 +46,14 @@ g_fmt(register char *b, double x)
 	if (sign)
 		*b++ = '-';
 	if (decpt == 9999) /* Infinity or Nan */ {
-		while((*b++ = *s++)) {}
+		for(*b = *s++; *b++; *b = *s++) {}
 		goto done0;
 		}
 	if (decpt <= -4 || decpt > se - s + 5) {
 		*b++ = *s++;
 		if (*s) {
 			*b++ = '.';
-			while((*b = *s++))
+			for(*b = *s++; *b; *b = *s++)
 				b++;
 			}
 		*b++ = 'e';
@@ -67,7 +67,7 @@ g_fmt(register char *b, double x)
 		for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10) {}
 		for(;;) {
 			i = decpt / k;
-			*b++ = i + '0';
+			*b++ = (char)i + '0';
 			if (--j <= 0)
 				break;
 			decpt -= i*k;
@@ -79,10 +79,10 @@ g_fmt(register char *b, double x)
 		*b++ = '.';
 		for(; decpt < 0; decpt++)
 			*b++ = '0';
-		while((*b++ = *s++)) {}
+		for(*b = *s++; *b++; *b = *s++) {}
 		}
 	else {
-		while((*b = *s++)) {
+		for(*b = *s++; *b; *b = *s++) {
 			b++;
 			if (--decpt == 0 && *s)
 				*b++ = '.';
