Rename errors from "?msg" to "#msg"
diff --git a/cmd/wuffs-c/internal/cgen/base/core-public.h b/cmd/wuffs-c/internal/cgen/base/core-public.h
index 673a6ae..7564c53 100644
--- a/cmd/wuffs-c/internal/cgen/base/core-public.h
+++ b/cmd/wuffs-c/internal/cgen/base/core-public.h
@@ -157,12 +157,12 @@
 
 static inline bool  //
 wuffs_base__status__is_complete(wuffs_base__status z) {
-  return (z == NULL) || ((*z != '$') && (*z != '?'));
+  return (z == NULL) || ((*z != '$') && (*z != '#'));
 }
 
 static inline bool  //
 wuffs_base__status__is_error(wuffs_base__status z) {
-  return z && (*z == '?');
+  return z && (*z == '#');
 }
 
 static inline bool  //
@@ -177,7 +177,7 @@
 
 static inline bool  //
 wuffs_base__status__is_warning(wuffs_base__status z) {
-  return z && (*z != '$') && (*z != '?');
+  return z && (*z != '$') && (*z != '#');
 }
 
 // --------
diff --git a/cmd/wuffs-c/internal/cgen/cgen.go b/cmd/wuffs-c/internal/cgen/cgen.go
index f4bffc0..f8dd8c2 100644
--- a/cmd/wuffs-c/internal/cgen/cgen.go
+++ b/cmd/wuffs-c/internal/cgen/cgen.go
@@ -128,7 +128,7 @@
 						pre := "warning"
 						if msg[0] == '$' {
 							pre = "suspension"
-						} else if msg[0] == '?' {
+						} else if msg[0] == '#' {
 							pre = "error"
 						}
 						b.printf("const char* wuffs_base__%s__%s = \"%sbase: %s\";\n",
@@ -190,7 +190,7 @@
 }
 
 func statusMsgIsError(msg string) bool {
-	return (len(msg) != 0) && (msg[0] == '?')
+	return (len(msg) != 0) && (msg[0] == '#')
 }
 
 func statusMsgIsSuspension(msg string) bool {
@@ -198,7 +198,7 @@
 }
 
 func statusMsgIsWarning(msg string) bool {
-	return (len(msg) == 0) || (msg[0] != '$' && msg[0] != '?')
+	return (len(msg) == 0) || (msg[0] != '$' && msg[0] != '#')
 }
 
 type buffer []byte
@@ -676,7 +676,7 @@
 	category := "warning__"
 	if msg[0] == '$' {
 		category = "suspension__"
-	} else if msg[0] == '?' {
+	} else if msg[0] == '#' {
 		category = "error__"
 	}
 	z := status{
diff --git a/cmd/wuffs-c/internal/cgen/data.go b/cmd/wuffs-c/internal/cgen/data.go
index 322e567..d957cc8 100644
--- a/cmd/wuffs-c/internal/cgen/data.go
+++ b/cmd/wuffs-c/internal/cgen/data.go
@@ -70,7 +70,7 @@
 	"ceholder field. It isn't explicitly used, except that\n  // without it, the sizeof a struct with no fields can differ across C/C++\n  // compilers, and it is undefined behavior in C99. For example, gcc says that\n  // the sizeof an empty struct is 0, and g++ says that it is 1. This leads to\n  // ABI incompatibility if a Wuffs .c file is processed by one compiler and\n  // its .h file with another compiler.\n  //\n  // Instead, we explicitly insert an otherwise unused field, so that the\n  // sizeof this struct is always 1.\n  uint8_t private_impl;\n} wuffs_base__utility;\n\n" +
 	"" +
 	"// --------\n\n// A status is either NULL (meaning OK) or a string message. That message is\n// human-readable, for programmers, but it is not for end users. It is not\n// localized, and does not contain additional contextual information such as a\n// source filename.\n//\n// Status strings are statically allocated and should never be free'd. They can\n// be compared by the == operator and not just by strcmp.\n//\n// Statuses come in four categories:\n//  - OK:          the request was completed, successfully.\n//  - Warnings:    the request was completed, unsuccessfully.\n//  - Suspensions: the request was not completed, but can be re-tried.\n//  - Errors:      the request was not completed, permanently.\n//\n// When a function returns an incomplete status, a suspension means that that\n// function should be called again within a new context, such as after flushing\n// or re-filling an I/O buffer. An error means that an irrecoverable failure\n// state was reached.\ntypedef const char* wuffs_base__status;\n\n// !! INSERT wuffs_bas" +
-	"e__status names.\n\nstatic inline bool  //\nwuffs_base__status__is_complete(wuffs_base__status z) {\n  return (z == NULL) || ((*z != '$') && (*z != '?'));\n}\n\nstatic inline bool  //\nwuffs_base__status__is_error(wuffs_base__status z) {\n  return z && (*z == '?');\n}\n\nstatic inline bool  //\nwuffs_base__status__is_ok(wuffs_base__status z) {\n  return z == NULL;\n}\n\nstatic inline bool  //\nwuffs_base__status__is_suspension(wuffs_base__status z) {\n  return z && (*z == '$');\n}\n\nstatic inline bool  //\nwuffs_base__status__is_warning(wuffs_base__status z) {\n  return z && (*z != '$') && (*z != '?');\n}\n\n" +
+	"e__status names.\n\nstatic inline bool  //\nwuffs_base__status__is_complete(wuffs_base__status z) {\n  return (z == NULL) || ((*z != '$') && (*z != '#'));\n}\n\nstatic inline bool  //\nwuffs_base__status__is_error(wuffs_base__status z) {\n  return z && (*z == '#');\n}\n\nstatic inline bool  //\nwuffs_base__status__is_ok(wuffs_base__status z) {\n  return z == NULL;\n}\n\nstatic inline bool  //\nwuffs_base__status__is_suspension(wuffs_base__status z) {\n  return z && (*z == '$');\n}\n\nstatic inline bool  //\nwuffs_base__status__is_warning(wuffs_base__status z) {\n  return z && (*z != '$') && (*z != '#');\n}\n\n" +
 	"" +
 	"// --------\n\n// Flicks are a unit of time. One flick (frame-tick) is 1 / 705_600_000 of a\n// second. See https://github.com/OculusVR/Flicks\ntypedef int64_t wuffs_base__flicks;\n\n#define WUFFS_BASE__FLICKS_PER_SECOND ((uint64_t)705600000)\n#define WUFFS_BASE__FLICKS_PER_MILLISECOND ((uint64_t)705600)\n\n" +
 	"" +
diff --git a/doc/changelog.md b/doc/changelog.md
index fd1b673..f58e8c0 100644
--- a/doc/changelog.md
+++ b/doc/changelog.md
@@ -43,7 +43,7 @@
 - Marked some internal status codes as private.
 - Removed closed-for-read/write built-in status codes.
 - Changed the string messages for built-in status codes.
-- Changed `error "foo"` to `"?foo"` or `base."?bar"`.
+- Changed `error "foo"` to `"#foo"` or `base."#bar"`.
 - Added warnings as another status code category.
 - Made the status type a `const char *`, not an `int32_t`.
 - Disallowed `__double_underscore` prefixed names.
@@ -67,4 +67,4 @@
 
 ---
 
-Updated on December 2018.
+Updated on February 2019.
diff --git a/lang/ast/ast.go b/lang/ast/ast.go
index 422b800..eac9489 100644
--- a/lang/ast/ast.go
+++ b/lang/ast/ast.go
@@ -302,7 +302,7 @@
 //  - List0: <Arg|Expr> function call args, assoc. op args or list members.
 //
 // A zero ID0 means an identifier or literal in ID2, like `foo`, `42` or a
-// status literal like `"?foo"` or `pkg."$bar"`. For status literals, ID1 is
+// status literal like `"#foo"` or `pkg."$bar"`. For status literals, ID1 is
 // the package.
 //
 // For unary operators, ID0 is the operator and RHS is the operand.
diff --git a/lang/builtin/builtin.go b/lang/builtin/builtin.go
index 2ca9272..7e8c396 100644
--- a/lang/builtin/builtin.go
+++ b/lang/builtin/builtin.go
@@ -28,21 +28,21 @@
 	`"$short write"`,
 
 	// Errors.
-	`"?bad argument (length too short)"`,
-	`"?bad argument"`,
-	`"?bad call sequence"`,
-	`"?bad receiver"`,
-	`"?bad restart"`,
-	`"?bad sizeof receiver"`,
-	`"?bad workbuf length"`,
-	`"?bad wuffs version"`,
-	`"?cannot return a suspension"`,
-	`"?disabled by previous error"`,
-	`"?initialize falsely claimed already zeroed"`,
-	`"?initialize not called"`,
-	`"?interleaved coroutine calls"`,
-	`"?not enough data"`,
-	`"?too much data"`,
+	`"#bad argument (length too short)"`,
+	`"#bad argument"`,
+	`"#bad call sequence"`,
+	`"#bad receiver"`,
+	`"#bad restart"`,
+	`"#bad sizeof receiver"`,
+	`"#bad workbuf length"`,
+	`"#bad wuffs version"`,
+	`"#cannot return a suspension"`,
+	`"#disabled by previous error"`,
+	`"#initialize falsely claimed already zeroed"`,
+	`"#initialize not called"`,
+	`"#interleaved coroutine calls"`,
+	`"#not enough data"`,
+	`"#too much data"`,
 }
 
 // TODO: a collection of forbidden variable names like and, or, not, as, ref,
diff --git a/lang/check/bounds.go b/lang/check/bounds.go
index 38838e5..a2d36ef 100644
--- a/lang/check/bounds.go
+++ b/lang/check/bounds.go
@@ -79,7 +79,7 @@
 
 func isErrorStatus(literal t.ID, tm *t.Map) bool {
 	s := literal.Str(tm)
-	return (len(s) >= 2) && (s[0] == '"') && (s[1] == '?')
+	return (len(s) >= 2) && (s[0] == '"') && (s[1] == '#')
 }
 
 func btoi(b bool) *big.Int {
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 322e33a..7584110 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -190,12 +190,12 @@
 
 static inline bool  //
 wuffs_base__status__is_complete(wuffs_base__status z) {
-  return (z == NULL) || ((*z != '$') && (*z != '?'));
+  return (z == NULL) || ((*z != '$') && (*z != '#'));
 }
 
 static inline bool  //
 wuffs_base__status__is_error(wuffs_base__status z) {
-  return z && (*z == '?');
+  return z && (*z == '#');
 }
 
 static inline bool  //
@@ -210,7 +210,7 @@
 
 static inline bool  //
 wuffs_base__status__is_warning(wuffs_base__status z) {
-  return z && (*z != '$') && (*z != '?');
+  return z && (*z != '$') && (*z != '#');
 }
 
 // --------
@@ -4787,27 +4787,27 @@
 const char* wuffs_base__suspension__short_read = "$base: short read";
 const char* wuffs_base__suspension__short_write = "$base: short write";
 const char* wuffs_base__error__bad_argument_length_too_short =
-    "?base: bad argument (length too short)";
-const char* wuffs_base__error__bad_argument = "?base: bad argument";
-const char* wuffs_base__error__bad_call_sequence = "?base: bad call sequence";
-const char* wuffs_base__error__bad_receiver = "?base: bad receiver";
-const char* wuffs_base__error__bad_restart = "?base: bad restart";
+    "#base: bad argument (length too short)";
+const char* wuffs_base__error__bad_argument = "#base: bad argument";
+const char* wuffs_base__error__bad_call_sequence = "#base: bad call sequence";
+const char* wuffs_base__error__bad_receiver = "#base: bad receiver";
+const char* wuffs_base__error__bad_restart = "#base: bad restart";
 const char* wuffs_base__error__bad_sizeof_receiver =
-    "?base: bad sizeof receiver";
-const char* wuffs_base__error__bad_workbuf_length = "?base: bad workbuf length";
-const char* wuffs_base__error__bad_wuffs_version = "?base: bad wuffs version";
+    "#base: bad sizeof receiver";
+const char* wuffs_base__error__bad_workbuf_length = "#base: bad workbuf length";
+const char* wuffs_base__error__bad_wuffs_version = "#base: bad wuffs version";
 const char* wuffs_base__error__cannot_return_a_suspension =
-    "?base: cannot return a suspension";
+    "#base: cannot return a suspension";
 const char* wuffs_base__error__disabled_by_previous_error =
-    "?base: disabled by previous error";
+    "#base: disabled by previous error";
 const char* wuffs_base__error__initialize_falsely_claimed_already_zeroed =
-    "?base: initialize falsely claimed already zeroed";
+    "#base: initialize falsely claimed already zeroed";
 const char* wuffs_base__error__initialize_not_called =
-    "?base: initialize not called";
+    "#base: initialize not called";
 const char* wuffs_base__error__interleaved_coroutine_calls =
-    "?base: interleaved coroutine calls";
-const char* wuffs_base__error__not_enough_data = "?base: not enough data";
-const char* wuffs_base__error__too_much_data = "?base: too much data";
+    "#base: interleaved coroutine calls";
+const char* wuffs_base__error__not_enough_data = "#base: not enough data";
+const char* wuffs_base__error__too_much_data = "#base: too much data";
 
 // ---------------- Images
 
@@ -6150,38 +6150,38 @@
 // ---------------- Status Codes Implementations
 
 const char* wuffs_deflate__error__bad_huffman_code_over_subscribed =
-    "?deflate: bad Huffman code (over-subscribed)";
+    "#deflate: bad Huffman code (over-subscribed)";
 const char* wuffs_deflate__error__bad_huffman_code_under_subscribed =
-    "?deflate: bad Huffman code (under-subscribed)";
+    "#deflate: bad Huffman code (under-subscribed)";
 const char* wuffs_deflate__error__bad_huffman_code_length_count =
-    "?deflate: bad Huffman code length count";
+    "#deflate: bad Huffman code length count";
 const char* wuffs_deflate__error__bad_huffman_code_length_repetition =
-    "?deflate: bad Huffman code length repetition";
+    "#deflate: bad Huffman code length repetition";
 const char* wuffs_deflate__error__bad_huffman_code =
-    "?deflate: bad Huffman code";
+    "#deflate: bad Huffman code";
 const char* wuffs_deflate__error__bad_huffman_minimum_code_length =
-    "?deflate: bad Huffman minimum code length";
-const char* wuffs_deflate__error__bad_block = "?deflate: bad block";
-const char* wuffs_deflate__error__bad_distance = "?deflate: bad distance";
+    "#deflate: bad Huffman minimum code length";
+const char* wuffs_deflate__error__bad_block = "#deflate: bad block";
+const char* wuffs_deflate__error__bad_distance = "#deflate: bad distance";
 const char* wuffs_deflate__error__bad_distance_code_count =
-    "?deflate: bad distance code count";
+    "#deflate: bad distance code count";
 const char* wuffs_deflate__error__bad_literal_length_code_count =
-    "?deflate: bad literal/length code count";
+    "#deflate: bad literal/length code count";
 const char* wuffs_deflate__error__inconsistent_stored_block_length =
-    "?deflate: inconsistent stored block length";
+    "#deflate: inconsistent stored block length";
 const char* wuffs_deflate__error__missing_end_of_block_code =
-    "?deflate: missing end-of-block code";
+    "#deflate: missing end-of-block code";
 const char* wuffs_deflate__error__no_huffman_codes =
-    "?deflate: no Huffman codes";
+    "#deflate: no Huffman codes";
 const char*
     wuffs_deflate__error__internal_error_inconsistent_huffman_decoder_state =
-        "?deflate: internal error: inconsistent Huffman decoder state";
+        "#deflate: internal error: inconsistent Huffman decoder state";
 const char* wuffs_deflate__error__internal_error_inconsistent_i_o =
-    "?deflate: internal error: inconsistent I/O";
+    "#deflate: internal error: inconsistent I/O";
 const char* wuffs_deflate__error__internal_error_inconsistent_distance =
-    "?deflate: internal error: inconsistent distance";
+    "#deflate: internal error: inconsistent distance";
 const char* wuffs_deflate__error__internal_error_inconsistent_n_bits =
-    "?deflate: internal error: inconsistent n_bits";
+    "#deflate: internal error: inconsistent n_bits";
 
 // ---------------- Private Consts
 
@@ -8068,9 +8068,9 @@
 
 // ---------------- Status Codes Implementations
 
-const char* wuffs_lzw__error__bad_code = "?lzw: bad code";
+const char* wuffs_lzw__error__bad_code = "#lzw: bad code";
 const char* wuffs_lzw__error__internal_error_inconsistent_i_o =
-    "?lzw: internal error: inconsistent I/O";
+    "#lzw: internal error: inconsistent I/O";
 
 // ---------------- Private Consts
 
@@ -8578,13 +8578,13 @@
 
 // ---------------- Status Codes Implementations
 
-const char* wuffs_gif__error__bad_block = "?gif: bad block";
-const char* wuffs_gif__error__bad_extension_label = "?gif: bad extension label";
-const char* wuffs_gif__error__bad_graphic_control = "?gif: bad graphic control";
-const char* wuffs_gif__error__bad_header = "?gif: bad header";
-const char* wuffs_gif__error__bad_literal_width = "?gif: bad literal width";
+const char* wuffs_gif__error__bad_block = "#gif: bad block";
+const char* wuffs_gif__error__bad_extension_label = "#gif: bad extension label";
+const char* wuffs_gif__error__bad_graphic_control = "#gif: bad graphic control";
+const char* wuffs_gif__error__bad_header = "#gif: bad header";
+const char* wuffs_gif__error__bad_literal_width = "#gif: bad literal width";
 const char* wuffs_gif__error__internal_error_inconsistent_ri_wi =
-    "?gif: internal error: inconsistent ri/wi";
+    "#gif: internal error: inconsistent ri/wi";
 
 // ---------------- Private Consts
 
@@ -10832,11 +10832,11 @@
 
 // ---------------- Status Codes Implementations
 
-const char* wuffs_gzip__error__bad_checksum = "?gzip: bad checksum";
+const char* wuffs_gzip__error__bad_checksum = "#gzip: bad checksum";
 const char* wuffs_gzip__error__bad_compression_method =
-    "?gzip: bad compression method";
-const char* wuffs_gzip__error__bad_encoding_flags = "?gzip: bad encoding flags";
-const char* wuffs_gzip__error__bad_header = "?gzip: bad header";
+    "#gzip: bad compression method";
+const char* wuffs_gzip__error__bad_encoding_flags = "#gzip: bad encoding flags";
+const char* wuffs_gzip__error__bad_header = "#gzip: bad header";
 
 // ---------------- Private Consts
 
@@ -11314,14 +11314,14 @@
 
 // ---------------- Status Codes Implementations
 
-const char* wuffs_zlib__error__bad_checksum = "?zlib: bad checksum";
+const char* wuffs_zlib__error__bad_checksum = "#zlib: bad checksum";
 const char* wuffs_zlib__error__bad_compression_method =
-    "?zlib: bad compression method";
+    "#zlib: bad compression method";
 const char* wuffs_zlib__error__bad_compression_window_size =
-    "?zlib: bad compression window size";
-const char* wuffs_zlib__error__bad_parity_check = "?zlib: bad parity check";
+    "#zlib: bad compression window size";
+const char* wuffs_zlib__error__bad_parity_check = "#zlib: bad parity check";
 const char* wuffs_zlib__error__todo_unsupported_preset_dictionary =
-    "?zlib: TODO: unsupported preset dictionary";
+    "#zlib: TODO: unsupported preset dictionary";
 
 // ---------------- Private Consts
 
diff --git a/std/deflate/decode_deflate.wuffs b/std/deflate/decode_deflate.wuffs
index 782bafc..8c3f6a0 100644
--- a/std/deflate/decode_deflate.wuffs
+++ b/std/deflate/decode_deflate.wuffs
@@ -12,24 +12,24 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-pub status "?bad Huffman code (over-subscribed)"
-pub status "?bad Huffman code (under-subscribed)"
-pub status "?bad Huffman code length count"
-pub status "?bad Huffman code length repetition"
-pub status "?bad Huffman code"
-pub status "?bad Huffman minimum code length"
-pub status "?bad block"
-pub status "?bad distance"
-pub status "?bad distance code count"
-pub status "?bad literal/length code count"
-pub status "?inconsistent stored block length"
-pub status "?missing end-of-block code"
-pub status "?no Huffman codes"
+pub status "#bad Huffman code (over-subscribed)"
+pub status "#bad Huffman code (under-subscribed)"
+pub status "#bad Huffman code length count"
+pub status "#bad Huffman code length repetition"
+pub status "#bad Huffman code"
+pub status "#bad Huffman minimum code length"
+pub status "#bad block"
+pub status "#bad distance"
+pub status "#bad distance code count"
+pub status "#bad literal/length code count"
+pub status "#inconsistent stored block length"
+pub status "#missing end-of-block code"
+pub status "#no Huffman codes"
 
-pri status "?internal error: inconsistent Huffman decoder state"
-pri status "?internal error: inconsistent I/O"
-pri status "?internal error: inconsistent distance"
-pri status "?internal error: inconsistent n_bits"
+pri status "#internal error: inconsistent Huffman decoder state"
+pri status "#internal error: inconsistent I/O"
+pri status "#internal error: inconsistent distance"
+pri status "#internal error: inconsistent n_bits"
 
 // TODO: replace the placeholder 1 value with either 0 or (32768 + 512),
 // depending on whether we'll move decoder.history into the workbuf.
@@ -228,7 +228,7 @@
 		} else if type == 2 {
 			this.init_dynamic_huffman?(src:args.src)
 		} else {
-			return "?bad block"
+			return "#bad block"
 		}
 
 		this.end_of_block = false
@@ -258,14 +258,14 @@
 	//
 	// Ditto for decode_huffman_slow and decode_huffman_fast.
 	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
-		return "?internal error: inconsistent n_bits"
+		return "#internal error: inconsistent n_bits"
 	}
 	this.n_bits = 0
 	this.bits = 0
 
 	length = args.src.read_u32le?()
 	if (length.low_bits(n:16) + length.high_bits(n:16)) != 0xFFFF {
-		return "?inconsistent stored block length"
+		return "#inconsistent stored block length"
 	}
 	length = length.low_bits(n:16)
 	while true {
@@ -350,12 +350,12 @@
 	}
 	n_lit = bits.low_bits(n:5) + 257
 	if n_lit > 286 {
-		return "?bad literal/length code count"
+		return "#bad literal/length code count"
 	}
 	bits >>= 5
 	n_dist = bits.low_bits(n:5) + 1
 	if n_dist > 30 {
-		return "?bad distance code count"
+		return "#bad distance code count"
 	}
 	bits >>= 5
 	n_clen = bits.low_bits(n:4) + 4
@@ -413,7 +413,7 @@
 		// For H-CL, there should be no redirections and all symbols should be
 		// literals.
 		if (table_entry >> 24) != 0x80 {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		table_entry = (table_entry >> 8) & 0xFF
 
@@ -431,7 +431,7 @@
 		if table_entry == 16 {
 			n_extra_bits = 2
 			if i <= 0 {
-				return "?bad Huffman code length repetition"
+				return "#bad Huffman code length repetition"
 			}
 			rep_symbol = this.code_lengths[i - 1] & 15
 			rep_count = 3
@@ -447,7 +447,7 @@
 			rep_count = 11
 			assert rep_count <= 11
 		} else {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		while n_bits < n_extra_bits,
 			inv i < 320,
@@ -466,7 +466,7 @@
 		while rep_count > 0 {
 			// TODO: hoist this check up one level?
 			if i >= (n_lit + n_dist) {
-				return "?bad Huffman code length count"
+				return "#bad Huffman code length count"
 			}
 			assert i < (288 + 32) via "a < (b + c): a < (b0 + c0); b0 <= b; c0 <= c"(b0:n_lit, c0:n_dist)
 			this.code_lengths[i] = rep_symbol
@@ -476,10 +476,10 @@
 	}
 
 	if i != (n_lit + n_dist) {
-		return "?bad Huffman code length count"
+		return "#bad Huffman code length count"
 	}
 	if this.code_lengths[256] == 0 {
-		return "?missing end-of-block code"
+		return "#missing end-of-block code"
 	}
 
 	status = this.init_huff!(which:0, n_codes0:0, n_codes1:n_lit, base_symbol:257)
@@ -562,13 +562,13 @@
 		// TODO: this if should be unnecessary. Have some way to assert that,
 		// for all j, counts[j] <= i, and thus counts[j]++ will not overflow.
 		if counts[this.code_lengths[i] & 15] >= 320 {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		counts[this.code_lengths[i] & 15] += 1
 		i += 1
 	}
 	if ((counts[0] as base.u32) + args.n_codes0) == args.n_codes1 {
-		return "?no Huffman codes"
+		return "#no Huffman codes"
 	}
 
 	// Check that the Huffman code completely covers all possible input bits.
@@ -576,19 +576,19 @@
 	i = 1
 	while i <= 15 {
 		if remaining > (1 << 30) {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		// Each iteration doubles the number of possible remaining codes.
 		remaining <<= 1
 		if remaining < (counts[i] as base.u32) {
-			return "?bad Huffman code (over-subscribed)"
+			return "#bad Huffman code (over-subscribed)"
 		}
 		remaining -= counts[i] as base.u32
 		i += 1
 	}
 	if remaining != 0 {
 		// TODO: when is a degenerate Huffman table valid?
-		return "?bad Huffman code (under-subscribed)"
+		return "#bad Huffman code (under-subscribed)"
 	}
 
 	// Calculate offsets and n_symbols.
@@ -608,7 +608,7 @@
 		offsets[i] = n_symbols as base.u16
 		count = counts[i] as base.u32
 		if n_symbols > (320 - count) {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		assert (n_symbols + count) <= 320 via "(a + b) <= c: a <= (c - b)"()
 		// TODO: change this to n_symbols += count, once the proof engine's
@@ -617,7 +617,7 @@
 		i += 1
 	}
 	if n_symbols > 288 {
-		return "?internal error: inconsistent Huffman decoder state"
+		return "#internal error: inconsistent Huffman decoder state"
 	}
 
 	// Calculate symbols.
@@ -645,11 +645,11 @@
 		assert i < 320 via "a < b: a < c; c <= b"(c:args.n_codes1)
 		// TODO: this if check should be unnecessary.
 		if i < args.n_codes0 {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		if this.code_lengths[i] != 0 {
 			if offsets[this.code_lengths[i] & 15] >= 320 {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 			symbols[offsets[this.code_lengths[i] & 15]] = (i - args.n_codes0) as base.u16
 			offsets[this.code_lengths[i] & 15] += 1
@@ -670,7 +670,7 @@
 			break
 		}
 		if min_cl >= 9 {
-			return "?bad Huffman minimum code length"
+			return "#bad Huffman minimum code length"
 		}
 		min_cl += 1
 	}
@@ -683,7 +683,7 @@
 		}
 		if max_cl <= 1 {
 			// TODO: when is a degenerate Huffman table valid?
-			return "?no Huffman codes"
+			return "#no Huffman codes"
 		}
 		max_cl -= 1
 	}
@@ -708,10 +708,10 @@
 	//  - this.huffs[0][0b11111] = 0x80001805 (literal, symbols[9]=0x18, code_length=5)
 	i = 0
 	if (n_symbols != (offsets[max_cl] as base.u32)) or (n_symbols != (offsets[15] as base.u32)) {
-		return "?internal error: inconsistent Huffman decoder state"
+		return "#internal error: inconsistent Huffman decoder state"
 	}
 	if (args.n_codes0 + (symbols[0] as base.u32)) >= 320 {
-		return "?internal error: inconsistent Huffman decoder state"
+		return "#internal error: inconsistent Huffman decoder state"
 	}
 
 	initial_high_bits = 1 << 9
@@ -731,13 +731,13 @@
 		inv n_symbols <= 288,
 	{
 		if (args.n_codes0 + (symbols[i] as base.u32)) >= 320 {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		cl = (this.code_lengths[args.n_codes0 + (symbols[i] as base.u32)] & 15) as base.u32
 		if cl > prev_cl {
 			code <<= cl - prev_cl
 			if code >= (1 << 15) {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 		}
 		// For the remainder of this loop body, prev_cl is the original code
@@ -770,20 +770,20 @@
 					}
 					remaining -= counts[j] as base.u32
 					if remaining > (1 << 30) {
-						return "?internal error: inconsistent Huffman decoder state"
+						return "#internal error: inconsistent Huffman decoder state"
 					}
 					remaining <<= 1
 					j += 1
 				}
 				if (j <= 9) or (15 < j) {
-					return "?internal error: inconsistent Huffman decoder state"
+					return "#internal error: inconsistent Huffman decoder state"
 				}
 				j -= 9
 				initial_high_bits = (1 as base.u32) << j
 
 				top = next_top
 				if (top + ((1 as base.u32) << j)) > huffs_table_size {
-					return "?internal error: inconsistent Huffman decoder state"
+					return "#internal error: inconsistent Huffman decoder state"
 				}
 				assert (top + ((1 as base.u32) << j)) <= 1024 via "a <= b: a <= c; c <= b"(c:huffs_table_size)
 				next_top = top + ((1 as base.u32) << j)
@@ -793,7 +793,7 @@
 			}
 		}
 		if (key >= (1 << 9)) or (counts[prev_cl] <= 0) {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 		counts[prev_cl] -= 1
 
@@ -816,7 +816,7 @@
 				value = dcode_magic_numbers[symbol & 31] | cl
 			}
 		} else {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 
 		// The table uses log2(initial_high_bits) bits, but reversed_key only
@@ -831,7 +831,7 @@
 		{
 			high_bits -= delta
 			if (top + ((high_bits | reversed_key) & 511)) >= huffs_table_size {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 			assert (top + ((high_bits | reversed_key) & 511)) < 1024 via "a < b: a < c; c <= b"(c:huffs_table_size)
 			this.huffs[args.which][top + ((high_bits | reversed_key) & 511)] = value
@@ -844,7 +844,7 @@
 		assert i < 288 via "a < b: a < c; c <= b"(c:n_symbols)
 		code += 1
 		if code >= (1 << 15) {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 	}
 	return ok
diff --git a/std/deflate/decode_huffman_fast.wuffs b/std/deflate/decode_huffman_fast.wuffs
index 55cd340..496a120 100644
--- a/std/deflate/decode_huffman_fast.wuffs
+++ b/std/deflate/decode_huffman_fast.wuffs
@@ -35,7 +35,7 @@
 	var hdist              base.u32
 
 	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
-		return "?internal error: inconsistent n_bits"
+		return "#internal error: inconsistent n_bits"
 	}
 
 	bits = this.bits
@@ -131,7 +131,7 @@
 			redir_top = (table_entry >> 8) & 0xFFFF
 			redir_mask = ((1 as base.u32) << ((table_entry >> 4) & 0x0F)) - 1
 			if (redir_top + (bits & redir_mask)) >= huffs_table_size {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 			assert (redir_top + (bits & redir_mask)) < 1024 via "a < b: a < c; c <= b"(c:huffs_table_size)
 			table_entry = this.huffs[0][redir_top + (bits & redir_mask)]
@@ -150,20 +150,20 @@
 				this.end_of_block = true
 				break:loop
 			} else if (table_entry >> 28) != 0 {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			} else if (table_entry >> 27) != 0 {
-				return "?bad Huffman code"
+				return "#bad Huffman code"
 			} else {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 
 			// Once again, redundant but explicit assertions.
 			assert args.src.available() >= 8
 
 		} else if (table_entry >> 27) != 0 {
-			return "?bad Huffman code"
+			return "#bad Huffman code"
 		} else {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 
 		// length = base_number_minus_3 + 3 + extra_bits.
@@ -245,7 +245,7 @@
 			redir_top = (table_entry >> 8) & 0xFFFF
 			redir_mask = ((1 as base.u32) << ((table_entry >> 4) & 0x0F)) - 1
 			if (redir_top + (bits & redir_mask)) >= huffs_table_size {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 			assert (redir_top + (bits & redir_mask)) < 1024 via "a < b: a < c; c <= b"(c:huffs_table_size)
 			table_entry = this.huffs[1][redir_top + (bits & redir_mask)]
@@ -259,9 +259,9 @@
 		// For H-D, all symbols should be base_number + extra_bits.
 		if (table_entry >> 24) != 0x40 {
 			if (table_entry >> 24) == 0x08 {
-				return "?bad Huffman code"
+				return "#bad Huffman code"
 			}
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 
 		// dist_minus_1 = base_number_minus_1 + extra_bits.
@@ -316,7 +316,7 @@
 					length = 0
 				}
 				if this.history_index < hdist {
-					return "?bad distance"
+					return "#bad distance"
 				}
 				// Re-purpose the hdist variable as the this.history index to
 				// start copying from.
@@ -354,7 +354,7 @@
 				}
 
 				if ((dist_minus_1 + 1) as base.u64) > args.dst.since_mark().length() {
-					return "?internal error: inconsistent distance"
+					return "#internal error: inconsistent distance"
 				}
 			}
 			// Once again, redundant but explicit assertions.
@@ -389,7 +389,7 @@
 		if args.src.can_undo_byte() {
 			args.src.undo_byte!()
 		} else {
-			return "?internal error: inconsistent I/O"
+			return "#internal error: inconsistent I/O"
 		}
 	}
 
@@ -397,6 +397,6 @@
 	this.n_bits = n_bits
 
 	if (this.n_bits >= 8) or ((this.bits >> this.n_bits) != 0) {
-		return "?internal error: inconsistent n_bits"
+		return "#internal error: inconsistent n_bits"
 	}
 }
diff --git a/std/deflate/decode_huffman_slow.wuffs b/std/deflate/decode_huffman_slow.wuffs
index 4d94fdb..6294e37 100644
--- a/std/deflate/decode_huffman_slow.wuffs
+++ b/std/deflate/decode_huffman_slow.wuffs
@@ -39,7 +39,7 @@
 	// correctness and performance.
 
 	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
-		return "?internal error: inconsistent n_bits"
+		return "#internal error: inconsistent n_bits"
 	}
 
 	bits = this.bits
@@ -80,7 +80,7 @@
 			redir_mask = ((1 as base.u32) << ((table_entry >> 4) & 0x0F)) - 1
 			while true {
 				if (redir_top + (bits & redir_mask)) >= huffs_table_size {
-					return "?internal error: inconsistent Huffman decoder state"
+					return "#internal error: inconsistent Huffman decoder state"
 				}
 				assert (redir_top + (bits & redir_mask)) < 1024 via "a < b: a < c; c <= b"(c:huffs_table_size)
 				table_entry = this.huffs[0][redir_top + (bits & redir_mask)]
@@ -107,17 +107,17 @@
 				this.end_of_block = true
 				break:loop
 			} else if (table_entry >> 28) != 0 {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			} else if (table_entry >> 27) != 0 {
-				return "?bad Huffman code"
+				return "#bad Huffman code"
 			} else {
-				return "?internal error: inconsistent Huffman decoder state"
+				return "#internal error: inconsistent Huffman decoder state"
 			}
 
 		} else if (table_entry >> 27) != 0 {
-			return "?bad Huffman code"
+			return "#bad Huffman code"
 		} else {
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 
 		// length = base_number_minus_3 + 3 + extra_bits.
@@ -162,7 +162,7 @@
 			redir_mask = ((1 as base.u32) << ((table_entry >> 4) & 0x0F)) - 1
 			while true {
 				if (redir_top + (bits & redir_mask)) >= huffs_table_size {
-					return "?internal error: inconsistent Huffman decoder state"
+					return "#internal error: inconsistent Huffman decoder state"
 				}
 				assert (redir_top + (bits & redir_mask)) < 1024 via "a < b: a < c; c <= b"(c:huffs_table_size)
 				table_entry = this.huffs[1][redir_top + (bits & redir_mask)]
@@ -182,9 +182,9 @@
 		// For H-D, all symbols should be base_number + extra_bits.
 		if (table_entry >> 24) != 0x40 {
 			if (table_entry >> 24) == 0x08 {
-				return "?bad Huffman code"
+				return "#bad Huffman code"
 			}
-			return "?internal error: inconsistent Huffman decoder state"
+			return "#internal error: inconsistent Huffman decoder state"
 		}
 
 		// dist_minus_1 = base_number_minus_1 + extra_bits.
@@ -226,7 +226,7 @@
 					length = 0
 				}
 				if this.history_index < hdist {
-					return "?bad distance"
+					return "#bad distance"
 				}
 				// Re-purpose the hdist variable as the this.history index to
 				// start copying from.
@@ -288,6 +288,6 @@
 	this.n_bits = n_bits
 
 	if (this.n_bits >= 8) or ((this.bits >> (this.n_bits & 7)) != 0) {
-		return "?internal error: inconsistent n_bits"
+		return "#internal error: inconsistent n_bits"
 	}
 }
diff --git a/std/gif/decode_gif.wuffs b/std/gif/decode_gif.wuffs
index 5f6c781..e8b20fc 100644
--- a/std/gif/decode_gif.wuffs
+++ b/std/gif/decode_gif.wuffs
@@ -14,13 +14,13 @@
 
 use "std/lzw"
 
-pub status "?bad block"
-pub status "?bad extension label"
-pub status "?bad graphic control"
-pub status "?bad header"
-pub status "?bad literal width"
+pub status "#bad block"
+pub status "#bad extension label"
+pub status "#bad graphic control"
+pub status "#bad header"
+pub status "#bad literal width"
 
-pri status "?internal error: inconsistent ri/wi"
+pri status "#internal error: inconsistent ri/wi"
 
 // TODO: replace the placeholder 1 value with either 0 or 0xFFFF (plus
 // lzw.decoder_workbuf_len_max_incl_worst_case), depending on whether we'll
@@ -131,7 +131,7 @@
 	var ffio base.bool
 
 	if this.call_sequence >= 1 {
-		return base."?bad call sequence"
+		return base."#bad call sequence"
 	}
 
 	this.decode_header?(src:args.src)
@@ -198,7 +198,7 @@
 
 pub func decoder.restart_frame!(index base.u64, io_position base.u64) base.status {
 	if this.call_sequence == 0 {
-		return base."?bad call sequence"
+		return base."#bad call sequence"
 	}
 	this.end_of_data = false
 	this.restarted = true
@@ -299,7 +299,7 @@
 	if not this.restarted {
 		this.frame_config_io_position = args.src.position()
 	} else if this.frame_config_io_position != args.src.position() {
-		return base."?bad restart"
+		return base."#bad restart"
 	} else {
 		this.restarted = false
 	}
@@ -315,7 +315,7 @@
 			this.end_of_data = true
 			break
 		} else {
-			return "?bad block"
+			return "#bad block"
 		}
 	}
 }
@@ -333,7 +333,7 @@
 	}
 	if (c[0] != 0x47) or (c[1] != 0x49) or (c[2] != 0x46) or (c[3] != 0x38) or
 		((c[4] != 0x37) and (c[4] != 0x39)) or (c[5] != 0x61) {
-		return "?bad header"
+		return "#bad header"
 	}
 }
 
@@ -502,11 +502,11 @@
 	var gc_duration_centiseconds base.u16
 
 	if this.seen_graphic_control {
-		return "?bad graphic control"
+		return "#bad graphic control"
 	}
 	c = args.src.read_u8?()
 	if c != 4 {
-		return "?bad graphic control"
+		return "#bad graphic control"
 	}
 
 	flags = args.src.read_u8?()
@@ -537,7 +537,7 @@
 
 	c = args.src.read_u8?()
 	if c != 0 {
-		return "?bad graphic control"
+		return "#bad graphic control"
 	}
 	this.seen_graphic_control = true
 }
@@ -663,7 +663,7 @@
 
 	lw = args.src.read_u8?()
 	if (lw < 2) or (8 < lw) {
-		return "?bad literal width"
+		return "#bad literal width"
 	}
 	this.lzw.set_literal_width!(lw:lw as base.u32)
 
@@ -718,12 +718,12 @@
 		}
 
 		if decoder_workbuf_len_max_incl_worst_case > args.workbuf.length() {
-			return base."?bad workbuf length"
+			return base."#bad workbuf length"
 		}
 
 		while:inner true {
 			if (this.compressed_ri > this.compressed_wi) or (this.compressed_wi > 4096) {
-				return "?internal error: inconsistent ri/wi"
+				return "#internal error: inconsistent ri/wi"
 			}
 			io_bind (io:r, data:this.compressed[this.compressed_ri:this.compressed_wi]) {
 				lzw_status =? this.lzw.decode_io_writer?(
@@ -764,7 +764,7 @@
 	if (this.dst_y < this.frame_rect_y1) and
 		(this.frame_rect_x0 != this.frame_rect_x1) and
 		(this.frame_rect_y0 != this.frame_rect_y1) {
-		return base."?not enough data"
+		return base."#not enough data"
 	}
 }
 
@@ -795,7 +795,7 @@
 		src = args.src[src_ri:]
 
 		if this.dst_y >= this.frame_rect_y1 {
-			return base."?too much data"
+			return base."#too much data"
 		}
 
 		// First, copy from src to that part of the frame rect that is inside
@@ -833,7 +833,7 @@
 		if args.src.length() == src_ri {
 			break
 		} else if args.src.length() < src_ri {
-			return "?internal error: inconsistent ri/wi"
+			return "#internal error: inconsistent ri/wi"
 		}
 
 		// Second, skip over src for that part of the frame rect that is
@@ -857,7 +857,7 @@
 		}
 
 		if src_ri != args.src.length() {
-			return "?internal error: inconsistent ri/wi"
+			return "#internal error: inconsistent ri/wi"
 		}
 		break
 	}
diff --git a/std/gzip/decode_gzip.wuffs b/std/gzip/decode_gzip.wuffs
index d61fd0f..b6409d3 100644
--- a/std/gzip/decode_gzip.wuffs
+++ b/std/gzip/decode_gzip.wuffs
@@ -15,10 +15,10 @@
 use "std/crc32"
 use "std/deflate"
 
-pub status "?bad checksum"
-pub status "?bad compression method"
-pub status "?bad encoding flags"
-pub status "?bad header"
+pub status "#bad checksum"
+pub status "#bad compression method"
+pub status "#bad encoding flags"
+pub status "#bad header"
 
 // TODO: reference deflate.decoder_workbuf_len_max_incl_worst_case.
 pub const decoder_workbuf_len_max_incl_worst_case base.u64 = 1
@@ -55,15 +55,15 @@
 	// Read the header.
 	c = args.src.read_u8?()
 	if c != 0x1F {
-		return "?bad header"
+		return "#bad header"
 	}
 	c = args.src.read_u8?()
 	if c != 0x8B {
-		return "?bad header"
+		return "#bad header"
 	}
 	c = args.src.read_u8?()
 	if c != 0x08 {
-		return "?bad compression method"
+		return "#bad compression method"
 	}
 	flags = args.src.read_u8?()
 	// TODO: API for returning the header's MTIME field.
@@ -106,7 +106,7 @@
 
 	// Reserved flags bits must be zero.
 	if (flags & 0xE0) != 0 {
-		return "?bad encoding flags"
+		return "#bad encoding flags"
 	}
 
 	// Decode and checksum the DEFLATE-encoded payload.
@@ -126,6 +126,6 @@
 	decoded_length_want = args.src.read_u32le?()
 	if (not this.ignore_checksum) and
 		((checksum_got != checksum_want) or (decoded_length_got != decoded_length_want)) {
-		return "?bad checksum"
+		return "#bad checksum"
 	}
 }
diff --git a/std/lzw/decode_lzw.wuffs b/std/lzw/decode_lzw.wuffs
index 3e08741..341dab8 100644
--- a/std/lzw/decode_lzw.wuffs
+++ b/std/lzw/decode_lzw.wuffs
@@ -12,9 +12,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-pub status "?bad code"
+pub status "#bad code"
 
-pri status "?internal error: inconsistent I/O"
+pri status "#internal error: inconsistent I/O"
 
 // TODO: move bulk data buffers like decoder.suffixes or decoder.output into
 // the workbuf? The first attempt at this was a performance regression for
@@ -116,9 +116,9 @@
 		} else if this.read_from_return_value == 2 {
 			yield base."$short read"
 		} else if this.read_from_return_value == 3 {
-			return "?bad code"
+			return "#bad code"
 		} else {
-			return "?internal error: inconsistent I/O"
+			return "#internal error: inconsistent I/O"
 		}
 	}
 }
@@ -336,7 +336,7 @@
 
 	while this.output_wi > 0 {
 		if this.output_ri > this.output_wi {
-			return "?internal error: inconsistent I/O"
+			return "#internal error: inconsistent I/O"
 		}
 		s = this.output[this.output_ri:this.output_wi]
 		n = args.dst.copy_from_slice!(s:s)
diff --git a/std/zlib/decode_zlib.wuffs b/std/zlib/decode_zlib.wuffs
index 57e2483..1529b38 100644
--- a/std/zlib/decode_zlib.wuffs
+++ b/std/zlib/decode_zlib.wuffs
@@ -15,12 +15,12 @@
 use "std/adler32"
 use "std/deflate"
 
-pub status "?bad checksum"
-pub status "?bad compression method"
-pub status "?bad compression window size"
-pub status "?bad parity check"
+pub status "#bad checksum"
+pub status "#bad compression method"
+pub status "#bad compression window size"
+pub status "#bad parity check"
 
-pri status "?TODO: unsupported preset dictionary"
+pri status "#TODO: unsupported preset dictionary"
 
 // TODO: reference deflate.decoder_workbuf_len_max_incl_worst_case.
 pub const decoder_workbuf_len_max_incl_worst_case base.u64 = 1
@@ -52,16 +52,16 @@
 
 	x = args.src.read_u16be?()
 	if ((x >> 8) & 0x0F) != 0x08 {
-		return "?bad compression method"
+		return "#bad compression method"
 	}
 	if (x >> 12) > 0x07 {
-		return "?bad compression window size"
+		return "#bad compression window size"
 	}
 	if (x & 0x20) != 0 {
-		return "?TODO: unsupported preset dictionary"
+		return "#TODO: unsupported preset dictionary"
 	}
 	if (x % 31) != 0 {
-		return "?bad parity check"
+		return "#bad parity check"
 	}
 
 	// Decode and checksum the DEFLATE-encoded payload.
@@ -78,6 +78,6 @@
 	}
 	checksum_want = args.src.read_u32be?()
 	if (not this.ignore_checksum) and (checksum_got != checksum_want) {
-		return "?bad checksum"
+		return "#bad checksum"
 	}
 }
diff --git a/test/c/std/gif.c b/test/c/std/gif.c
index d8e4bb2..c81f937 100644
--- a/test/c/std/gif.c
+++ b/test/c/std/gif.c
@@ -141,7 +141,7 @@
 const char* test_basic_status_strings() {
   CHECK_FOCUS(__func__);
   const char* s1 = wuffs_base__error__bad_wuffs_version;
-  const char* t1 = "?base: bad wuffs version";
+  const char* t1 = "#base: bad wuffs version";
   if (strcmp(s1, t1)) {
     RETURN_FAIL("got \"%s\", want \"%s\"", s1, t1);
   }
@@ -151,7 +151,7 @@
     RETURN_FAIL("got \"%s\", want \"%s\"", s2, t2);
   }
   const char* s3 = wuffs_gif__error__bad_header;
-  const char* t3 = "?gif: bad header";
+  const char* t3 = "#gif: bad header";
   if (strcmp(s3, t3)) {
     RETURN_FAIL("got \"%s\", want \"%s\"", s3, t3);
   }
@@ -163,7 +163,7 @@
   // The function call here is from "std/gif" but the argument is from
   // "std/lzw". The former package depends on the latter.
   const char* s0 = wuffs_lzw__error__bad_code;
-  const char* t0 = "?lzw: bad code";
+  const char* t0 = "#lzw: bad code";
   if (strcmp(s0, t0)) {
     RETURN_FAIL("got \"%s\", want \"%s\"", s0, t0);
   }