diff --git a/lang/ast/ast.go b/lang/ast/ast.go
index f118379..03ee9ce 100644
--- a/lang/ast/ast.go
+++ b/lang/ast/ast.go
@@ -236,6 +236,13 @@
 	return nil
 }
 
+func dropExprCachedMBounds(n *Node) error {
+	if n.kind == KExpr {
+		n.mBounds = interval.IntRange{nil, nil}
+	}
+	return nil
+}
+
 type Loop interface {
 	AsNode() *Node
 	HasBreak() bool
@@ -390,6 +397,8 @@
 func (n *Assert) Condition() *Expr { return n.rhs.AsExpr() }
 func (n *Assert) Args() []*Node    { return n.list0 }
 
+func (n *Assert) DropExprCachedMBounds() error { return n.AsNode().Walk(dropExprCachedMBounds) }
+
 func NewAssert(keyword t.ID, condition *Expr, reason t.ID, args []*Node) *Assert {
 	return &Assert{
 		kind:  KAssert,
diff --git a/lang/check/bounds.go b/lang/check/bounds.go
index dfdcc20..48ce697 100644
--- a/lang/check/bounds.go
+++ b/lang/check/bounds.go
@@ -357,6 +357,10 @@
 }
 
 func (q *checker) bcheckAssert(n *a.Assert) error {
+	if err := n.DropExprCachedMBounds(); err != nil {
+		return err
+	}
+
 	condition := n.Condition()
 	if _, err := q.bcheckExpr(condition, 0); err != nil {
 		return err
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 67377d1..9598c16 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -21066,7 +21066,7 @@
                           (((uint64_t)(1))
                            << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                       (iop_a_src += 1, wuffs_base__make_empty_struct());
-                      goto label__string_loop_inner__continue;
+                      goto label__string_loop_outer__continue;
                     }
                     status =
                         wuffs_base__make_status(wuffs_json__error__bad_utf_8);
@@ -21122,7 +21122,7 @@
                           (((uint64_t)(1))
                            << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                       (iop_a_src += 1, wuffs_base__make_empty_struct());
-                      goto label__string_loop_inner__continue;
+                      goto label__string_loop_outer__continue;
                     }
                     status =
                         wuffs_base__make_status(wuffs_json__error__bad_utf_8);
@@ -21183,7 +21183,7 @@
                           (((uint64_t)(1))
                            << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                       (iop_a_src += 1, wuffs_base__make_empty_struct());
-                      goto label__string_loop_inner__continue;
+                      goto label__string_loop_outer__continue;
                     }
                     status =
                         wuffs_base__make_status(wuffs_json__error__bad_utf_8);
@@ -21245,7 +21245,7 @@
                     (((uint64_t)(3)) << WUFFS_BASE__TOKEN__LINK__SHIFT) |
                     (((uint64_t)(1)) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
                 (iop_a_src += 1, wuffs_base__make_empty_struct());
-                goto label__string_loop_inner__continue;
+                goto label__string_loop_outer__continue;
               }
               status = wuffs_base__make_status(wuffs_json__error__bad_utf_8);
               goto exit;
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index e8d1c4d..c3db53c 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -629,7 +629,7 @@
 											link: 0x3,
 											length: 1)
 										args.src.skip32_fast!(actual: 1, worst_case: 1)
-										continue.string_loop_inner
+										continue.string_loop_outer
 									}
 									return "#bad UTF-8"
 								}
@@ -677,7 +677,7 @@
 											link: 0x3,
 											length: 1)
 										args.src.skip32_fast!(actual: 1, worst_case: 1)
-										continue.string_loop_inner
+										continue.string_loop_outer
 									}
 									return "#bad UTF-8"
 								}
@@ -730,7 +730,7 @@
 											link: 0x3,
 											length: 1)
 										args.src.skip32_fast!(actual: 1, worst_case: 1)
-										continue.string_loop_inner
+										continue.string_loop_outer
 									}
 									return "#bad UTF-8"
 								}
@@ -783,7 +783,7 @@
 								link: 0x3,
 								length: 1)
 							args.src.skip32_fast!(actual: 1, worst_case: 1)
-							continue.string_loop_inner
+							continue.string_loop_outer
 						}
 						return "#bad UTF-8"
 					} endwhile.string_loop_inner
