Drop args- and this-related facts after ? call
diff --git a/lang/check/bounds.go b/lang/check/bounds.go
index 17b4509..69b1a70 100644
--- a/lang/check/bounds.go
+++ b/lang/check/bounds.go
@@ -195,6 +195,14 @@
 	return o, nil
 }
 
+func updateFactsForSuspension(x *a.Expr) (*a.Expr, error) {
+	if x.Mentions(exprArgs) || x.Mentions(exprThis) {
+		return nil, nil
+	}
+	// TODO: drop any facts involving ptr-typed local variables?
+	return x, nil
+}
+
 func (q *checker) bcheckBlock(block []*a.Node) error {
 	unreachable := false
 	for _, o := range block {
@@ -213,16 +221,9 @@
 			// No-op.
 		case a.KRet:
 			if o.AsRet().Keyword() == t.IDYield {
-				// Drop any facts involving args or this.
-				if err := q.facts.update(func(x *a.Expr) (*a.Expr, error) {
-					if x.Mentions(exprArgs) || x.Mentions(exprThis) {
-						return nil, nil
-					}
-					return x, nil
-				}); err != nil {
+				if err := q.facts.update(updateFactsForSuspension); err != nil {
 					return err
 				}
-				// TODO: drop any facts involving ptr-typed local variables?
 				continue
 			}
 		}
@@ -423,6 +424,12 @@
 		return err
 	}
 
+	if rhs.Effect().Coroutine() && (op != t.IDEqQuestion) {
+		if err := q.facts.update(updateFactsForSuspension); err != nil {
+			return err
+		}
+	}
+
 	if lhs == nil {
 		return nil
 	}
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index e0e7078..b446d4b 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -18535,8 +18535,8 @@
           uint32_t t_0 = *iop_a_src++;
           v_b0 = t_0;
         }
-        self->private_impl.f_bits |= (v_b0 << self->private_impl.f_n_bits);
-        self->private_impl.f_n_bits += 8;
+        self->private_impl.f_bits |= (v_b0 << (self->private_impl.f_n_bits & 3));
+        self->private_impl.f_n_bits = ((self->private_impl.f_n_bits & 3) + 8);
       }
       v_final = (self->private_impl.f_bits & 1);
       v_type = ((self->private_impl.f_bits >> 1) & 3);
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index df5c72f..31b75e3 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -228,8 +228,8 @@
 			post this.n_bits >= 3,
 		{
 			b0 = args.src.read_u8_as_u32?()
-			this.bits |= b0 << this.n_bits
-			this.n_bits += 8
+			this.bits |= b0 << (this.n_bits & 3)
+			this.n_bits = (this.n_bits & 3) + 8
 		} endwhile
 		final = this.bits & 0x01
 		type = (this.bits >> 1) & 0x03