Add generated C's io0_etc pointers
diff --git a/internal/cgen/cgen.go b/internal/cgen/cgen.go
index 670c0e9..d5cb53b 100644
--- a/internal/cgen/cgen.go
+++ b/internal/cgen/cgen.go
@@ -73,16 +73,22 @@
 // advances, it cannot advance past io2_etc. In the rarer case that an iop_etc
 // pointer retreats, undoing a read or write, it cannot retreat past io1_etc.
 //
+// The iop_etc pointer can change over the lifetime of a function. The ioN_etc
+// pointers, for numeric N, cannot.
+//
 // At the start of a function, these pointers are initialized from an
 // io_buffer's fields (ptr, ri, wi, len). For an io_reader:
+//  - io0_etc = ptr
 //  - io1_etc = ptr + ri
 //  - iop_etc = ptr + ri
 //  - io2_etc = ptr + wi
 // and for an io_writer:
+//  - io0_etc = ptr
 //  - io1_etc = ptr + wi
 //  - iop_etc = ptr + wi
 //  - io2_etc = ptr + len
 const (
+	io0Prefix = "io0_" // Base.
 	io1Prefix = "io1_" // Lower bound.
 	io2Prefix = "io2_" // Upper bound.
 	iopPrefix = "iop_" // Pointer.
diff --git a/internal/cgen/var.go b/internal/cgen/var.go
index d5f5a14..94b5826 100644
--- a/internal/cgen/var.go
+++ b/internal/cgen/var.go
@@ -102,6 +102,7 @@
 
 	if header {
 		b.printf("uint8_t* %s%s = NULL;", iopPrefix, preName)
+		b.printf("uint8_t* %s%s WUFFS_BASE__POTENTIALLY_UNUSED = NULL;", io0Prefix, preName)
 		b.printf("uint8_t* %s%s WUFFS_BASE__POTENTIALLY_UNUSED = NULL;", io1Prefix, preName)
 		b.printf("uint8_t* %s%s WUFFS_BASE__POTENTIALLY_UNUSED = NULL;", io2Prefix, preName)
 	}
@@ -112,6 +113,7 @@
 		iopPrefix, preName, preName, preName, i1)
 
 	if header {
+		b.printf("%s%s = %s->data.ptr;", io0Prefix, preName, preName)
 		b.printf("%s%s = %s%s;", io1Prefix, preName, iopPrefix, preName)
 		b.printf("%s%s = %s->data.ptr + %s->%s;",
 			io2Prefix, preName, preName, preName, i2)
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 0a6d4d0..e48b87a 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -6396,10 +6396,12 @@
   uint32_t v_already_full = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -6513,10 +6515,12 @@
   wuffs_base__status v_status = NULL;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -6657,10 +6661,12 @@
   uint32_t v_n_copied = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -6668,10 +6674,12 @@
     }
   }
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -6831,10 +6839,12 @@
   uint32_t v_b3 = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -7334,10 +7344,12 @@
   uint32_t v_hdist = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -7345,10 +7357,12 @@
     }
   }
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -7623,10 +7637,12 @@
   uint32_t v_hdist = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -7634,10 +7650,12 @@
     }
   }
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -8224,10 +8242,12 @@
   uint16_t v_lm1_a = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -8402,10 +8422,12 @@
   uint64_t v_n = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -8830,10 +8852,12 @@
   wuffs_base__status status = NULL;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9086,10 +9110,12 @@
   uint8_t v_flags = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9229,10 +9255,12 @@
   uint8_t v_lw = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9425,10 +9453,12 @@
   uint8_t v_block_type = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9543,10 +9573,12 @@
   uint32_t v_i = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9614,10 +9646,12 @@
   uint32_t v_argb = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9823,10 +9857,12 @@
   uint8_t v_label = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9917,10 +9953,12 @@
   uint8_t v_block_size = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -9993,10 +10031,12 @@
   bool v_is_xmp = false;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -10242,10 +10282,12 @@
   uint16_t v_gc_duration_centiseconds = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -10369,10 +10411,12 @@
   wuffs_base__status status = NULL;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -10549,10 +10593,12 @@
   uint8_t v_lw = 0;
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -10750,10 +10796,12 @@
   wuffs_base__slice_u8 v_uncompressed = {0};
 
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -11230,10 +11278,12 @@
   uint32_t v_decoded_length_want = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -11241,10 +11291,12 @@
     }
   }
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }
@@ -11702,10 +11754,12 @@
   uint64_t v_mark = 0;
 
   uint8_t* iop_a_dst = NULL;
+  uint8_t* io0_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_dst WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_dst) {
     iop_a_dst = a_dst->data.ptr + a_dst->meta.wi;
+    io0_a_dst = a_dst->data.ptr;
     io1_a_dst = iop_a_dst;
     io2_a_dst = a_dst->data.ptr + a_dst->data.len;
     if (a_dst->meta.closed) {
@@ -11713,10 +11767,12 @@
     }
   }
   uint8_t* iop_a_src = NULL;
+  uint8_t* io0_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io1_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   uint8_t* io2_a_src WUFFS_BASE__POTENTIALLY_UNUSED = NULL;
   if (a_src) {
     iop_a_src = a_src->data.ptr + a_src->meta.ri;
+    io0_a_src = a_src->data.ptr;
     io1_a_src = iop_a_src;
     io2_a_src = a_src->data.ptr + a_src->meta.wi;
   }