diff --git a/cmd/wuffs-c/internal/cgen/cgen.go b/cmd/wuffs-c/internal/cgen/cgen.go
index 3c9249c..f4bffc0 100644
--- a/cmd/wuffs-c/internal/cgen/cgen.go
+++ b/cmd/wuffs-c/internal/cgen/cgen.go
@@ -998,22 +998,26 @@
 	b.writes("if (!self) { return wuffs_base__error__bad_receiver; }\n")
 
 	b.writes("if (sizeof(*self) != sizeof_star_self) {\n")
-	b.writes("return wuffs_base__error__bad_sizeof_receiver;\n")
+	b.writes("  return wuffs_base__error__bad_sizeof_receiver;\n")
 	b.writes("}\n")
 	b.writes("if (((wuffs_version >> 32) != WUFFS_VERSION_MAJOR) || " +
 		"(((wuffs_version >> 16) & 0xFFFF) > WUFFS_VERSION_MINOR)) {\n")
-	b.writes("return wuffs_base__error__bad_wuffs_version;\n")
+	b.writes("  return wuffs_base__error__bad_wuffs_version;\n")
 	b.writes("}\n\n")
 
 	b.writes("if ((initialize_flags & WUFFS_INITIALIZE__ALREADY_ZEROED) != 0) {\n")
-	b.writes("if (self->private_impl.magic != 0) {\n")
-	b.writes("return wuffs_base__error__initialize_falsely_claimed_already_zeroed;\n")
-	b.writes("}\n")
-	b.writes("} else if ((initialize_flags & WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {\n")
-	b.writes("memset(&(self->private_impl), 0, sizeof(self->private_impl));\n")
+	b.writes("  if (self->private_impl.magic != 0) {\n")
+	b.writes("    return wuffs_base__error__initialize_falsely_claimed_already_zeroed;\n")
+	b.writes("  }\n")
 	b.writes("} else {\n")
-	b.writes("memset(self, 0, sizeof(*self));\n")
-	b.writes("initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;\n")
+	b.writes("  void* p = &(self->private_impl);\n")
+	b.writes("  size_t n = sizeof(self->private_impl);\n")
+	b.writes("  if ((initialize_flags & WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {\n")
+	b.writes("    p = self;\n")
+	b.writes("    n = sizeof(*self);\n")
+	b.writes("    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;\n")
+	b.writes("  }\n")
+	b.writes("  memset(p, 0, n);\n")
 	b.writes("}\n\n")
 
 	// Call any ctors on sub-structs.
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index a4ebb28..1a60316 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -4998,12 +4998,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   self->private_impl.magic = WUFFS_BASE__MAGIC;
@@ -6005,12 +6009,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   self->private_impl.magic = WUFFS_BASE__MAGIC;
@@ -6291,12 +6299,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   self->private_impl.magic = WUFFS_BASE__MAGIC;
@@ -8094,12 +8106,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   self->private_impl.magic = WUFFS_BASE__MAGIC;
@@ -8678,12 +8694,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   {
@@ -10839,12 +10859,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   {
@@ -11320,12 +11344,16 @@
     if (self->private_impl.magic != 0) {
       return wuffs_base__error__initialize_falsely_claimed_already_zeroed;
     }
-  } else if ((initialize_flags &
-              WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) != 0) {
-    memset(&(self->private_impl), 0, sizeof(self->private_impl));
   } else {
-    memset(self, 0, sizeof(*self));
-    initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    void* p = &(self->private_impl);
+    size_t n = sizeof(self->private_impl);
+    if ((initialize_flags &
+         WUFFS_INITIALIZE__LEAVE_INTERNAL_BUFFERS_UNINITIALIZED) == 0) {
+      p = self;
+      n = sizeof(*self);
+      initialize_flags |= WUFFS_INITIALIZE__ALREADY_ZEROED;
+    }
+    memset(p, 0, n);
   }
 
   {
