Reject nullptr-valued io_buffer* args

name                                             old speed      new speed      delta

wuffs_gif_decode_1k_bw/clang5                     417MB/s ± 0%   417MB/s ± 0%     ~     (p=0.841 n=5+5)
wuffs_gif_decode_1k_color_full_init/clang5        136MB/s ± 1%   135MB/s ± 0%   -1.07%  (p=0.008 n=5+5)
wuffs_gif_decode_1k_color_part_init/clang5        180MB/s ± 0%   177MB/s ± 0%   -1.49%  (p=0.016 n=4+5)
wuffs_gif_decode_10k_bgra/clang5                  733MB/s ± 0%   733MB/s ± 0%     ~     (p=1.000 n=5+5)
wuffs_gif_decode_10k_indexed/clang5               197MB/s ± 0%   196MB/s ± 0%   -0.43%  (p=0.032 n=5+5)
wuffs_gif_decode_20k/clang5                       245MB/s ± 0%   249MB/s ± 0%   +1.59%  (p=0.008 n=5+5)
wuffs_gif_decode_100k_artificial/clang5           548MB/s ± 0%   553MB/s ± 0%   +0.97%  (p=0.008 n=5+5)
wuffs_gif_decode_100k_realistic/clang5            223MB/s ± 0%   226MB/s ± 0%   +1.48%  (p=0.008 n=5+5)
wuffs_gif_decode_1000k_full_init/clang5           226MB/s ± 0%   229MB/s ± 1%   +1.66%  (p=0.008 n=5+5)
wuffs_gif_decode_1000k_part_init/clang5           226MB/s ± 0%   229MB/s ± 0%   +1.51%  (p=0.008 n=5+5)
wuffs_gif_decode_anim_screencap/clang5           1.10GB/s ± 0%  1.11GB/s ± 0%   +0.91%  (p=0.008 n=5+5)

wuffs_gif_decode_1k_bw/gcc7                       465MB/s ± 2%   480MB/s ± 2%   +3.22%  (p=0.008 n=5+5)
wuffs_gif_decode_1k_color_full_init/gcc7          142MB/s ± 1%   143MB/s ± 1%   +1.18%  (p=0.008 n=5+5)
wuffs_gif_decode_1k_color_part_init/gcc7          186MB/s ± 0%   189MB/s ± 0%   +1.64%  (p=0.008 n=5+5)
wuffs_gif_decode_10k_bgra/gcc7                    634MB/s ± 0%   636MB/s ± 0%   +0.45%  (p=0.016 n=5+5)
wuffs_gif_decode_10k_indexed/gcc7                 198MB/s ± 0%   200MB/s ± 0%   +0.86%  (p=0.008 n=5+5)
wuffs_gif_decode_20k/gcc7                         243MB/s ± 0%   245MB/s ± 0%   +1.11%  (p=0.016 n=4+5)
wuffs_gif_decode_100k_artificial/gcc7             514MB/s ± 1%   516MB/s ± 1%     ~     (p=0.310 n=5+5)
wuffs_gif_decode_100k_realistic/gcc7              210MB/s ± 0%   214MB/s ± 0%   +1.67%  (p=0.008 n=5+5)
wuffs_gif_decode_1000k_full_init/gcc7             215MB/s ± 0%   218MB/s ± 0%   +1.53%  (p=0.008 n=5+5)
wuffs_gif_decode_1000k_part_init/gcc7             215MB/s ± 0%   218MB/s ± 0%   +1.54%  (p=0.008 n=5+5)
wuffs_gif_decode_anim_screencap/gcc7             1.07GB/s ± 1%  1.08GB/s ± 1%     ~     (p=0.095 n=5+5)

wuffs_deflate_decode_1k_full_init/clang5          156MB/s ± 0%   140MB/s ± 0%  -10.04%  (p=0.008 n=5+5)
wuffs_deflate_decode_1k_part_init/clang5          192MB/s ± 0%   170MB/s ± 0%  -11.83%  (p=0.008 n=5+5)
wuffs_deflate_decode_10k_full_init/clang5         227MB/s ± 1%   242MB/s ± 0%   +6.61%  (p=0.008 n=5+5)
wuffs_deflate_decode_10k_part_init/clang5         234MB/s ± 0%   249MB/s ± 0%   +6.79%  (p=0.008 n=5+5)
wuffs_deflate_decode_100k_just_one_read/clang5    282MB/s ± 0%   280MB/s ± 0%   -0.64%  (p=0.008 n=5+5)
wuffs_deflate_decode_100k_many_big_reads/clang5   238MB/s ± 0%   229MB/s ± 0%   -3.71%  (p=0.008 n=5+5)

wuffs_deflate_decode_1k_full_init/gcc7            157MB/s ± 0%   158MB/s ± 0%   +0.40%  (p=0.032 n=5+5)
wuffs_deflate_decode_1k_part_init/gcc7            194MB/s ± 0%   194MB/s ± 0%     ~     (p=0.151 n=5+5)
wuffs_deflate_decode_10k_full_init/gcc7           267MB/s ± 0%   266MB/s ± 0%     ~     (p=0.222 n=5+5)
wuffs_deflate_decode_10k_part_init/gcc7           276MB/s ± 0%   275MB/s ± 1%     ~     (p=0.056 n=5+5)
wuffs_deflate_decode_100k_just_one_read/gcc7      322MB/s ± 0%   322MB/s ± 0%     ~     (p=0.548 n=5+5)
wuffs_deflate_decode_100k_many_big_reads/gcc7     258MB/s ± 0%   258MB/s ± 0%     ~     (p=0.056 n=5+5)

wuffs_zlib_decode_10k/clang5                      212MB/s ± 0%   222MB/s ± 0%   +4.59%  (p=0.008 n=5+5)
wuffs_zlib_decode_100k/clang5                     252MB/s ± 1%   247MB/s ± 0%   -2.02%  (p=0.008 n=5+5)

wuffs_zlib_decode_10k/gcc7                        248MB/s ± 0%   253MB/s ± 0%   +2.00%  (p=0.008 n=5+5)
wuffs_zlib_decode_100k/gcc7                       283MB/s ± 0%   292MB/s ± 0%   +3.17%  (p=0.008 n=5+5)
diff --git a/internal/cgen/func.go b/internal/cgen/func.go
index 1996e78..3f8daf5 100644
--- a/internal/cgen/func.go
+++ b/internal/cgen/func.go
@@ -420,13 +420,10 @@
 	for _, o := range n.In().Fields() {
 		o := o.AsField()
 		oTyp := o.XType()
-		if oTyp.Decorator() != t.IDPtr && !oTyp.IsRefined() {
-			// TODO: Also check elements, for array-typed arguments.
-			continue
-		}
 
+		// TODO: Also check elements, for array-typed arguments.
 		switch {
-		case oTyp.Decorator() == t.IDPtr:
+		case oTyp.IsIOType() || (oTyp.Decorator() == t.IDPtr):
 			checks = append(checks, fmt.Sprintf("!%s%s", aPrefix, o.Name().Str(g.tm)))
 
 		case oTyp.IsRefined():
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 99ed30c..ebe1154 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -6384,6 +6384,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_dst || !a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 1)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -8135,6 +8139,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_dst || !a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 1)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -8730,6 +8738,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 1)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -8843,6 +8855,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 2)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -9097,6 +9113,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 3)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -9362,7 +9382,7 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
-  if (!a_dst) {
+  if (!a_dst || !a_src) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
     return wuffs_base__error__bad_argument;
   }
@@ -11263,6 +11283,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_dst || !a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 1)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;
@@ -11740,6 +11764,10 @@
                ? wuffs_base__error__disabled_by_previous_error
                : wuffs_base__error__initialize_not_called;
   }
+  if (!a_dst || !a_src) {
+    self->private_impl.magic = WUFFS_BASE__DISABLED;
+    return wuffs_base__error__bad_argument;
+  }
   if ((self->private_impl.active_coroutine != 0) &&
       (self->private_impl.active_coroutine != 1)) {
     self->private_impl.magic = WUFFS_BASE__DISABLED;