Add CHECK_STRING testlib macro
diff --git a/test/c/std/adler32.c b/test/c/std/adler32.c
index 4f4a653..ce64946 100644
--- a/test/c/std/adler32.c
+++ b/test/c/std/adler32.c
@@ -122,10 +122,7 @@
     wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
         .data = global_src_slice,
     });
-    const char* status_msg = read_file(&src, test_cases[i].filename);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(read_file(&src, test_cases[i].filename));
 
     int j;
     for (j = 0; j < 2; j++) {
diff --git a/test/c/std/crc32.c b/test/c/std/crc32.c
index c85ce43..a1a7109 100644
--- a/test/c/std/crc32.c
+++ b/test/c/std/crc32.c
@@ -122,10 +122,7 @@
     wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
         .data = global_src_slice,
     });
-    const char* status_msg = read_file(&src, test_cases[i].filename);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(read_file(&src, test_cases[i].filename));
 
     int j;
     for (j = 0; j < 2; j++) {
diff --git a/test/c/std/deflate.c b/test/c/std/deflate.c
index f258b6e..07b3194 100644
--- a/test/c/std/deflate.c
+++ b/test/c/std/deflate.c
@@ -232,12 +232,9 @@
   CHECK_FOCUS(__func__);
 
   // First, treat this like any other compare-to-golden test.
-  const char* status_msg = do_test_io_buffers(
-      wuffs_deflate_decode, &deflate_deflate_huffman_primlen_9_gt, UINT64_MAX,
-      UINT64_MAX);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(do_test_io_buffers(wuffs_deflate_decode,
+                                  &deflate_deflate_huffman_primlen_9_gt,
+                                  UINT64_MAX, UINT64_MAX));
 
   // Second, check that the decoder's huffman table sizes match those predicted
   // by the script/print-deflate-huff-table-size.go program.
@@ -249,10 +246,7 @@
   });
 
   golden_test* gt = &deflate_deflate_huffman_primlen_9_gt;
-  status_msg = read_file(&src, gt->src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, gt->src_filename));
 
   wuffs_deflate__decoder dec;
   wuffs_base__status status = wuffs_deflate__decoder__initialize(
@@ -340,16 +334,9 @@
       .data = global_want_slice,
   });
 
-  const char* status_msg;
   golden_test* gt = &deflate_256_bytes_gt;
-  status_msg = read_file(&src, gt->src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
-  status_msg = read_file(&want, gt->want_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, gt->src_filename));
+  CHECK_STRING(read_file(&want, gt->want_filename));
 
   int i;
   for (i = 1; i < 32; i++) {
@@ -391,10 +378,7 @@
 
     char prefix[64];
     snprintf(prefix, 64, "i=%d: ", i);
-    status_msg = check_io_buffers_equal(prefix, &got, &want);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(check_io_buffers_equal(prefix, &got, &want));
   }
   return NULL;
 }
@@ -440,16 +424,9 @@
       .data = global_want_slice,
   });
 
-  const char* status_msg;
   golden_test* gt = &deflate_pi_gt;
-  status_msg = read_file(&src, gt->src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
-  status_msg = read_file(&want, gt->want_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, gt->src_filename));
+  CHECK_STRING(read_file(&want, gt->want_filename));
 
   const int full_history_size = 0x8000;
   int i;
@@ -462,12 +439,9 @@
       RETURN_FAIL("initialize: \"%s\"", wuffs_base__status__message(&status));
     }
 
-    status_msg = do_test_wuffs_deflate_history(
+    CHECK_STRING(do_test_wuffs_deflate_history(
         i, gt, &src, &got, &dec, 0, want.meta.wi + i,
-        i >= 0 ? NULL : wuffs_base__suspension__short_write);
-    if (status_msg) {
-      return status_msg;
-    }
+        i >= 0 ? NULL : wuffs_base__suspension__short_write));
 
     uint32_t want_history_index = i >= 0 ? 0 : full_history_size;
     if (dec.private_impl.f_history_index != want_history_index) {
@@ -496,10 +470,7 @@
     });
     history_want.meta.wi = full_history_size;
 
-    status_msg = check_io_buffers_equal("", &history_got, &history_want);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(check_io_buffers_equal("", &history_got, &history_want));
   }
   return NULL;
 }
@@ -515,10 +486,7 @@
   });
 
   golden_test* gt = &deflate_pi_gt;
-  const char* status_msg = read_file(&src, gt->src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, gt->src_filename));
 
   uint32_t starting_history_indexes[] = {
       0x0000, 0x0001, 0x1234, 0x7FFB, 0x7FFC, 0x7FFD, 0x7FFE, 0x7FFF,
@@ -543,12 +511,9 @@
       RETURN_FAIL("initialize: \"%s\"", wuffs_base__status__message(&status));
     }
 
-    status_msg = do_test_wuffs_deflate_history(
+    CHECK_STRING(do_test_wuffs_deflate_history(
         i, gt, &src, &got, &dec, starting_history_index, fragment_length,
-        wuffs_base__suspension__short_write);
-    if (status_msg) {
-      return status_msg;
-    }
+        wuffs_base__suspension__short_write));
 
     bool got_full = dec.private_impl.f_history_index >= 0x8000;
     uint32_t got_history_index = dec.private_impl.f_history_index & 0x7FFF;
diff --git a/test/c/std/gif.c b/test/c/std/gif.c
index 14fa3d7..f5ddda3 100644
--- a/test/c/std/gif.c
+++ b/test/c/std/gif.c
@@ -247,11 +247,8 @@
       RETURN_FAIL("decode_frame: \"%s\"", wuffs_base__status__message(&status));
     }
 
-    const char* status_msg = copy_to_io_buffer_from_pixel_buffer(
-        dst, &pb, wuffs_base__frame_config__bounds(&fc));
-    if (status_msg) {
-      RETURN_FAIL("copy_to_io_buffer_from_pixel_buffer: \"%s\"", status_msg);
-    }
+    CHECK_STRING(copy_to_io_buffer_from_pixel_buffer(
+        dst, &pb, wuffs_base__frame_config__bounds(&fc)));
   }
   return NULL;
 }
@@ -267,11 +264,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, filename));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -384,11 +377,8 @@
     }
   }
 
-  status_msg = copy_to_io_buffer_from_pixel_buffer(
-      &got, &pb, wuffs_base__frame_config__bounds(&fc));
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(copy_to_io_buffer_from_pixel_buffer(
+      &got, &pb, wuffs_base__frame_config__bounds(&fc)));
 
   if (rlimit < UINT64_MAX) {
     if (num_iters <= 2) {
@@ -407,33 +397,21 @@
           .len = 1024,
       }),
   });
-  status_msg = read_file(&pal_want, palette_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&pal_want, palette_filename));
   if (dst_pixfmt == WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY) {
     wuffs_base__io_buffer pal_got = ((wuffs_base__io_buffer){
         .data = wuffs_base__pixel_buffer__palette(&pb),
     });
     pal_got.meta.wi = pal_got.data.len;
-    status_msg = check_io_buffers_equal("palette ", &pal_got, &pal_want);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(check_io_buffers_equal("palette ", &pal_got, &pal_want));
   }
 
   wuffs_base__io_buffer ind_want = ((wuffs_base__io_buffer){
       .data = global_want_slice,
   });
-  status_msg = read_file(&ind_want, indexes_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&ind_want, indexes_filename));
   if (dst_pixfmt == WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY) {
-    status_msg = check_io_buffers_equal("indexes ", &got, &ind_want);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(check_io_buffers_equal("indexes ", &got, &ind_want));
   } else {
     wuffs_base__io_buffer expanded_want = ((wuffs_base__io_buffer){
         .data = global_work_slice,
@@ -484,10 +462,7 @@
       return "unsupported pixel format";
     }
 
-    status_msg = check_io_buffers_equal("pixels ", &got, &expanded_want);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(check_io_buffers_equal("pixels ", &got, &expanded_want));
   }
 
   {
@@ -559,15 +534,10 @@
 
 const char* test_wuffs_gif_call_interleaved() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, "test/data/bricks-dither.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/bricks-dither.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -606,15 +576,10 @@
 
 const char* test_wuffs_gif_call_sequence() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, "test/data/bricks-dither.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/bricks-dither.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -647,11 +612,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, filename));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -774,10 +735,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg = read_file(&src, "test/data/animated-red-blue.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/animated-red-blue.gif"));
   if (src.meta.wi < 1) {
     return "src file is too short";
   }
@@ -828,11 +786,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-empty-palette.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/artificial/gif-empty-palette.gif"));
   int q;
   for (q = 0; q < 2; q++) {
     src.meta.ri = 0;
@@ -904,11 +858,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-background-color.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-background-color.gif"));
   int q;
   for (q = 0; q < 2; q++) {
     src.meta.ri = 0;
@@ -947,11 +898,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-frame-out-of-bounds.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-frame-out-of-bounds.gif"));
   int q;
   for (q = 0; q < 2; q++) {
     src.meta.ri = 0;
@@ -990,12 +938,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-frame-out-of-bounds.gif");
-  if (status_msg) {
-    return status_msg;
-  }
-
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-frame-out-of-bounds.gif"));
   int q;
   for (q = 0; q < 2; q++) {
     src.meta.ri = 0;
@@ -1165,11 +1109,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-zero-width-frame.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-zero-width-frame.gif"));
   int q;
   for (q = 0; q < 3; q++) {
     src.meta.ri = 0;
@@ -1295,15 +1236,10 @@
 
 const char* test_wuffs_gif_decode_input_is_a_png() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, "test/data/bricks-dither.png");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/bricks-dither.png"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1324,16 +1260,11 @@
 
 const char* test_wuffs_gif_decode_interlaced_truncated() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/hippopotamus.interlaced.truncated.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/hippopotamus.interlaced.truncated.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1405,13 +1336,9 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
+  CHECK_STRING(
       read_file(&src, full ? "test/data/artificial/gif-metadata-full.gif"
-                           : "test/data/artificial/gif-metadata-empty.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+                           : "test/data/artificial/gif-metadata-empty.gif"));
 
   int iccp;
   for (iccp = 0; iccp < 2; iccp++) {
@@ -1571,15 +1498,10 @@
 
 const char* test_wuffs_gif_decode_missing_two_src_bytes() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, "test/data/pjw-thumbnail.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/pjw-thumbnail.gif"));
 
   // Trim the final two bytes: the 0x00 end-of-block and the 0x3B trailer.
   if (src.meta.wi < 2) {
@@ -1596,11 +1518,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-multiple-graphic-controls.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(
+      &src, "test/data/artificial/gif-multiple-graphic-controls.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1630,11 +1549,8 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-multiple-loop-counts.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-multiple-loop-counts.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1695,16 +1611,10 @@
 
 const char* test_wuffs_gif_decode_pixel_data_none() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-pixel-data-none.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/artificial/gif-pixel-data-none.gif"));
 
   return do_test_wuffs_gif_decode_expecting(
       src, 0, wuffs_base__error__not_enough_data, true);
@@ -1712,16 +1622,11 @@
 
 const char* test_wuffs_gif_decode_pixel_data_not_enough() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-pixel-data-not-enough.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-pixel-data-not-enough.gif"));
 
   return do_test_wuffs_gif_decode_expecting(
       src, 0, wuffs_base__error__not_enough_data, false);
@@ -1729,16 +1634,11 @@
 
 const char* test_wuffs_gif_decode_pixel_data_too_much_sans_quirk() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-pixel-data-too-much.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-pixel-data-too-much.gif"));
 
   return do_test_wuffs_gif_decode_expecting(
       src, 0, wuffs_base__error__too_much_data, false);
@@ -1746,16 +1646,11 @@
 
 const char* test_wuffs_gif_decode_pixel_data_too_much_with_quirk() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-pixel-data-too-much.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-pixel-data-too-much.gif"));
 
   return do_test_wuffs_gif_decode_expecting(
       src, WUFFS_GIF__QUIRK_IGNORE_TOO_MUCH_PIXEL_DATA, NULL, false);
@@ -1763,16 +1658,10 @@
 
 const char* test_wuffs_gif_frame_dirty_rect() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/hippopotamus.interlaced.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/hippopotamus.interlaced.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1835,11 +1724,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, "test/data/animated-red-blue.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/animated-red-blue.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -1919,10 +1804,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg = read_file(&src, "test/data/animated-red-blue.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, "test/data/animated-red-blue.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -2086,16 +1968,11 @@
 
 const char* test_wuffs_gif_small_frame_interlaced() {
   CHECK_FOCUS(__func__);
-
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg =
-      read_file(&src, "test/data/artificial/gif-small-frame-interlaced.gif");
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(
+      read_file(&src, "test/data/artificial/gif-small-frame-interlaced.gif"));
 
   wuffs_gif__decoder dec;
   wuffs_base__status status = wuffs_gif__decoder__initialize(
@@ -2163,35 +2040,23 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-  const char* status_msg = read_file(&src, filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, filename));
 
   src.meta.ri = 0;
   wuffs_base__io_buffer got = ((wuffs_base__io_buffer){
       .data = global_got_slice,
   });
-  status_msg = wuffs_gif_decode(
-      &got, 0, WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY, &src);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(wuffs_gif_decode(
+      &got, 0, WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY, &src));
 
   src.meta.ri = 0;
   wuffs_base__io_buffer want = ((wuffs_base__io_buffer){
       .data = global_want_slice,
   });
-  status_msg = mimic_gif_decode(
-      &want, 0, WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY, &src);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(mimic_gif_decode(
+      &want, 0, WUFFS_BASE__PIXEL_FORMAT__INDEXED__BGRA_BINARY, &src));
 
-  status_msg = check_io_buffers_equal("", &got, &want);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(check_io_buffers_equal("", &got, &want));
 
   // TODO: check the palette RGB values, not just the palette indexes
   // (pixels).
@@ -2283,11 +2148,7 @@
   wuffs_base__io_buffer src = ((wuffs_base__io_buffer){
       .data = global_src_slice,
   });
-
-  const char* status_msg = read_file(&src, filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, filename));
 
   bench_start();
   uint64_t n_bytes = 0;
@@ -2296,10 +2157,7 @@
   for (i = 0; i < iters; i++) {
     got.meta.wi = 0;
     src.meta.ri = 0;
-    status_msg = decode_func(&got, wuffs_initialize_flags, pixfmt, &src);
-    if (status_msg) {
-      return status_msg;
-    }
+    CHECK_STRING(decode_func(&got, wuffs_initialize_flags, pixfmt, &src));
     n_bytes += got.meta.wi;
   }
   bench_finish(iters, n_bytes);
diff --git a/test/c/std/gzip.c b/test/c/std/gzip.c
index f4bb6ba..f859904 100644
--- a/test/c/std/gzip.c
+++ b/test/c/std/gzip.c
@@ -124,10 +124,7 @@
       .data = global_src_slice,
   });
 
-  const char* status_msg = read_file(&src, gzip_midsummer_gt.src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, gzip_midsummer_gt.src_filename));
 
   // Flip a bit in the gzip checksum, which is in the last 8 bytes of the file.
   if (src.meta.wi < 8) {
diff --git a/test/c/std/lzw.c b/test/c/std/lzw.c
index 6172400..2f443e7 100644
--- a/test/c/std/lzw.c
+++ b/test/c/std/lzw.c
@@ -82,10 +82,7 @@
       .data = global_src_slice,
   });
 
-  const char* status_msg = read_file(&src, src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, src_filename));
   if (src.meta.wi != src_size) {
     RETURN_FAIL("src size: got %d, want %d", (int)(src.meta.wi),
                 (int)(src_size));
@@ -98,10 +95,7 @@
   }
   src.meta.ri++;
 
-  status_msg = read_file(&want, want_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&want, want_filename));
   if (want.meta.wi != want_size) {
     RETURN_FAIL("want size: got %d, want %d", (int)(want.meta.wi),
                 (int)(want_size));
@@ -388,10 +382,7 @@
       .data = global_src_slice,
   });
 
-  const char* status_msg = read_file(&src, filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, filename));
   if (src.meta.wi <= 0) {
     RETURN_FAIL("src size: got %d, want > 0", (int)(src.meta.wi));
   }
diff --git a/test/c/std/zlib.c b/test/c/std/zlib.c
index ed4f3fd..72a2004 100644
--- a/test/c/std/zlib.c
+++ b/test/c/std/zlib.c
@@ -135,10 +135,7 @@
       .data = global_src_slice,
   });
 
-  const char* status_msg = read_file(&src, zlib_midsummer_gt.src_filename);
-  if (status_msg) {
-    return status_msg;
-  }
+  CHECK_STRING(read_file(&src, zlib_midsummer_gt.src_filename));
   // Flip a bit in the zlib checksum, which is in the last 4 bytes of the file.
   if (src.meta.wi < 4) {
     RETURN_FAIL("source file was too short");
diff --git a/test/c/testlib/testlib.c b/test/c/testlib/testlib.c
index ecc7da1..6aca89e 100644
--- a/test/c/testlib/testlib.c
+++ b/test/c/testlib/testlib.c
@@ -64,6 +64,14 @@
 #define INCR_FAIL(msg, ...) \
   msg += snprintf(msg, sizeof(fail_msg) - (msg - fail_msg), ##__VA_ARGS__)
 
+#define CHECK_STRING(string) \
+  {                          \
+    const char* z = string;  \
+    if (z) {                 \
+      return z;              \
+    }                        \
+  }
+
 int tests_run = 0;
 
 uint64_t iterscale = 100;