upb: lock down upb_MiniTableExtension

PiperOrigin-RevId: 585817227
diff --git a/protos/protos.cc b/protos/protos.cc
index 6ee9f8d..4cd3d1e 100644
--- a/protos/protos.cc
+++ b/protos/protos.cc
@@ -115,8 +115,8 @@
                            const upb_MiniTableExtension* eid) {
   MessageLock msg_lock(msg);
   return _upb_Message_Getext(msg, eid) != nullptr ||
-         upb_MiniTable_FindUnknown(msg, eid->field.number, 0).status ==
-             kUpb_FindUnknown_Ok;
+         upb_MiniTable_FindUnknown(msg, upb_MiniTableExtension_Number(eid), 0)
+                 .status == kUpb_FindUnknown_Ok;
 }
 
 const upb_Message_Extension* GetOrPromoteExtension(
@@ -170,8 +170,9 @@
   if (message_arena != extension_arena) {
     // Try fuse, if fusing is not allowed or fails, create copy of extension.
     if (!upb_Arena_Fuse(message_arena, extension_arena)) {
-      msg_ext->data.ptr =
-          DeepClone(extension, msg_ext->ext->sub.submsg, message_arena);
+      msg_ext->data.ptr = DeepClone(
+          extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
+          message_arena);
       return absl::OkStatus();
     }
   }
@@ -189,7 +190,8 @@
   }
   // Clone extension into target message arena.
   msg_ext->data.ptr =
-      DeepClone(extension, msg_ext->ext->sub.submsg, message_arena);
+      DeepClone(extension, upb_MiniTableExtension_GetSubMessage(msg_ext->ext),
+                message_arena);
   return absl::OkStatus();
 }
 
diff --git a/protos/protos.h b/protos/protos.h
index 8ef7b66..27d8c4e 100644
--- a/protos/protos.h
+++ b/protos/protos.h
@@ -18,6 +18,7 @@
 #include "upb/message/copy.h"
 #include "upb/message/internal/accessors.h"
 #include "upb/message/internal/extension.h"
+#include "upb/mini_table/extension.h"
 #include "upb/wire/decode.h"
 #include "upb/wire/encode.h"
 
@@ -412,7 +413,8 @@
       const_cast<upb_Message*>(internal::GetInternalMsg(message)),
       id.mini_table_ext(), ::protos::internal::GetArena(message));
   if (!ext) {
-    return ExtensionNotFoundError(id.mini_table_ext()->field.number);
+    return ExtensionNotFoundError(
+        upb_MiniTableExtension_Number(id.mini_table_ext()));
   }
   return Ptr<const Extension>(::protos::internal::CreateMessage<Extension>(
       ext->data.ptr, ::protos::internal::GetArena(message)));
diff --git a/upb/message/copy.c b/upb/message/copy.c
index 52f8f67..e0977c4 100644
--- a/upb/message/copy.c
+++ b/upb/message/copy.c
@@ -184,8 +184,9 @@
     upb_Arena* arena) {
   dest->data = source->data;
   return upb_Clone_MessageValue(
-      &dest->data, upb_MiniTableField_CType(&mini_table_ext->field),
-      mini_table_ext->sub.submsg, arena);
+      &dest->data,
+      upb_MiniTableField_CType(&mini_table_ext->UPB_PRIVATE(field)),
+      upb_MiniTableExtension_GetSubMessage(mini_table_ext), arena);
 }
 
 upb_Message* _upb_Message_Copy(upb_Message* dst, const upb_Message* src,
@@ -259,7 +260,7 @@
   const upb_Message_Extension* ext = _upb_Message_Getexts(src, &ext_count);
   for (size_t i = 0; i < ext_count; ++i) {
     const upb_Message_Extension* msg_ext = &ext[i];
-    const upb_MiniTableField* field = &msg_ext->ext->field;
+    const upb_MiniTableField* field = &msg_ext->ext->UPB_PRIVATE(field);
     upb_Message_Extension* dst_ext =
         _upb_Message_GetOrCreateExtension(dst, msg_ext->ext, arena);
     if (!dst_ext) return NULL;
@@ -272,7 +273,7 @@
       UPB_ASSERT(msg_array);
       upb_Array* cloned_array =
           upb_Array_DeepClone(msg_array, upb_MiniTableField_CType(field),
-                              msg_ext->ext->sub.submsg, arena);
+                              msg_ext->ext->UPB_PRIVATE(sub).submsg, arena);
       if (!cloned_array) {
         return NULL;
       }
diff --git a/upb/message/internal/accessors.h b/upb/message/internal/accessors.h
index 5ace3fc..65f301d 100644
--- a/upb/message/internal/accessors.h
+++ b/upb/message/internal/accessors.h
@@ -217,7 +217,7 @@
 
 UPB_INLINE bool _upb_Message_HasExtensionField(
     const upb_Message* msg, const upb_MiniTableExtension* ext) {
-  UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->field));
+  UPB_ASSERT(upb_MiniTableField_HasPresence(&ext->UPB_PRIVATE(field)));
   return _upb_Message_Getext(msg, ext) != NULL;
 }
 
@@ -249,12 +249,12 @@
 UPB_INLINE void _upb_Message_GetExtensionField(
     const upb_Message* msg, const upb_MiniTableExtension* mt_ext,
     const void* default_val, void* val) {
-  UPB_ASSUME(upb_MiniTableField_IsExtension(&mt_ext->field));
+  UPB_ASSUME(upb_MiniTableField_IsExtension(&mt_ext->UPB_PRIVATE(field)));
   const upb_Message_Extension* ext = _upb_Message_Getext(msg, mt_ext);
   if (ext) {
-    _upb_MiniTable_CopyFieldData(val, &ext->data, &mt_ext->field);
+    _upb_MiniTable_CopyFieldData(val, &ext->data, &mt_ext->UPB_PRIVATE(field));
   } else {
-    _upb_MiniTable_CopyFieldData(val, default_val, &mt_ext->field);
+    _upb_MiniTable_CopyFieldData(val, default_val, &mt_ext->UPB_PRIVATE(field));
   }
 }
 
@@ -300,7 +300,7 @@
   upb_Message_Extension* ext =
       _upb_Message_GetOrCreateExtension(msg, mt_ext, a);
   if (!ext) return false;
-  _upb_MiniTable_CopyFieldData(&ext->data, val, &mt_ext->field);
+  _upb_MiniTable_CopyFieldData(&ext->data, val, &mt_ext->UPB_PRIVATE(field));
   return true;
 }
 
diff --git a/upb/message/map_sorter.c b/upb/message/map_sorter.c
index 6b396a4..42dc4b5 100644
--- a/upb/message/map_sorter.c
+++ b/upb/message/map_sorter.c
@@ -8,6 +8,7 @@
 #include "upb/message/internal/map_sorter.h"
 
 #include "upb/base/internal/log2.h"
+#include "upb/mini_table/extension.h"
 
 // Must be last.
 #include "upb/port/def.inc"
@@ -126,8 +127,8 @@
 static int _upb_mapsorter_cmpext(const void* _a, const void* _b) {
   const upb_Message_Extension* const* a = _a;
   const upb_Message_Extension* const* b = _b;
-  uint32_t a_num = (*a)->ext->field.number;
-  uint32_t b_num = (*b)->ext->field.number;
+  uint32_t a_num = upb_MiniTableExtension_Number((*a)->ext);
+  uint32_t b_num = upb_MiniTableExtension_Number((*b)->ext);
   assert(a_num != b_num);
   return a_num < b_num ? -1 : 1;
 }
diff --git a/upb/message/promote.c b/upb/message/promote.c
index 5bb84b1..f9efd5f 100644
--- a/upb/message/promote.c
+++ b/upb/message/promote.c
@@ -69,14 +69,15 @@
     upb_Message* msg, const upb_MiniTableExtension* ext_table,
     int decode_options, upb_Arena* arena,
     const upb_Message_Extension** extension) {
-  UPB_ASSERT(upb_MiniTableField_CType(&ext_table->field) == kUpb_CType_Message);
+  UPB_ASSERT(upb_MiniTableField_CType(upb_MiniTableExtension_AsField(
+                 ext_table)) == kUpb_CType_Message);
   *extension = _upb_Message_Getext(msg, ext_table);
   if (*extension) {
     return kUpb_GetExtension_Ok;
   }
 
   // Check unknown fields, if available promote.
-  int field_number = ext_table->field.number;
+  int field_number = upb_MiniTableExtension_Number(ext_table);
   upb_FindUnknownRet result = upb_MiniTable_FindUnknown(msg, field_number, 0);
   if (result.status != kUpb_FindUnknown_Ok) {
     return kUpb_GetExtension_NotPresent;
@@ -84,7 +85,8 @@
   size_t len;
   size_t ofs = result.ptr - upb_Message_GetUnknown(msg, &len);
   // Decode and promote from unknown.
-  const upb_MiniTable* extension_table = ext_table->sub.submsg;
+  const upb_MiniTable* extension_table =
+      upb_MiniTableExtension_GetSubMessage(ext_table);
   upb_UnknownToMessageRet parse_result = upb_MiniTable_ParseUnknownMessage(
       result.ptr, result.len, extension_table,
       /* base_message= */ NULL, decode_options, arena);
diff --git a/upb/message/promote_test.cc b/upb/message/promote_test.cc
index 0d279d4..dc7191a 100644
--- a/upb/message/promote_test.cc
+++ b/upb/message/promote_test.cc
@@ -37,6 +37,7 @@
 #include "upb/mini_descriptor/internal/encode.hpp"
 #include "upb/mini_descriptor/internal/modifiers.h"
 #include "upb/mini_descriptor/link.h"
+#include "upb/mini_table/extension.h"
 #include "upb/mini_table/field.h"
 #include "upb/mini_table/message.h"
 #include "upb/mini_table/sub.h"
@@ -72,11 +73,15 @@
                                                 arena);
 
   upb_FindUnknownRet result = upb_MiniTable_FindUnknown(
-      base_msg, upb_test_ModelExtension1_model_ext_ext.field.number, 0);
+      base_msg,
+      upb_MiniTableExtension_Number(&upb_test_ModelExtension1_model_ext_ext),
+      0);
   EXPECT_EQ(kUpb_FindUnknown_Ok, result.status);
 
   result = upb_MiniTable_FindUnknown(
-      base_msg, upb_test_ModelExtension2_model_ext_ext.field.number, 0);
+      base_msg,
+      upb_MiniTableExtension_Number(&upb_test_ModelExtension2_model_ext_ext),
+      0);
   EXPECT_EQ(kUpb_FindUnknown_NotPresent, result.status);
 
   upb_Arena_Free(arena);
diff --git a/upb/mini_descriptor/decode.c b/upb/mini_descriptor/decode.c
index 1470b3f..7d97708 100644
--- a/upb/mini_descriptor/decode.c
+++ b/upb/mini_descriptor/decode.c
@@ -805,7 +805,7 @@
                                         &count, &sub_counts);
   if (!ret || count != 1) return NULL;
 
-  upb_MiniTableField* f = &ext->field;
+  upb_MiniTableField* f = &ext->UPB_PRIVATE(field);
 
   f->mode |= kUpb_LabelFlags_IsExtension;
   f->offset = 0;
@@ -819,8 +819,8 @@
     if ((f->mode & kUpb_FieldMode_Mask) == kUpb_FieldMode_Array) return NULL;
   }
 
-  ext->extendee = extendee;
-  ext->sub = sub;
+  ext->UPB_PRIVATE(extendee) = extendee;
+  ext->UPB_PRIVATE(sub) = sub;
 
   return ret;
 }
diff --git a/upb/mini_table/extension.h b/upb/mini_table/extension.h
index 7fde315..0f30752 100644
--- a/upb/mini_table/extension.h
+++ b/upb/mini_table/extension.h
@@ -8,8 +8,43 @@
 #ifndef UPB_MINI_TABLE_EXTENSION_H_
 #define UPB_MINI_TABLE_EXTENSION_H_
 
+#include <stdint.h>
+
 #include "upb/mini_table/internal/extension.h"
 
+// Must be last.
+#include "upb/port/def.inc"
+
 typedef struct upb_MiniTableExtension upb_MiniTableExtension;
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_API_INLINE const struct upb_MiniTableField* upb_MiniTableExtension_AsField(
+    const upb_MiniTableExtension* e) {
+  return UPB_PRIVATE(_upb_MiniTableExtension_AsField)(e);
+}
+
+UPB_API_INLINE uint32_t
+upb_MiniTableExtension_Number(const upb_MiniTableExtension* e) {
+  return UPB_PRIVATE(_upb_MiniTableExtension_Number)(e);
+}
+
+UPB_API_INLINE const struct upb_MiniTable* upb_MiniTableExtension_GetSubMessage(
+    const upb_MiniTableExtension* e) {
+  return UPB_PRIVATE(_upb_MiniTableExtension_GetSubMessage)(e);
+}
+
+UPB_API_INLINE void upb_MiniTableExtension_SetSubMessage(
+    upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
+  return UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(e, m);
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#include "upb/port/undef.inc"
+
 #endif /* UPB_MINI_TABLE_EXTENSION_H_ */
diff --git a/upb/mini_table/extension_registry.c b/upb/mini_table/extension_registry.c
index 3c3f58f..f5b118f 100644
--- a/upb/mini_table/extension_registry.c
+++ b/upb/mini_table/extension_registry.c
@@ -7,8 +7,14 @@
 
 #include "upb/mini_table/extension_registry.h"
 
+#include <stddef.h>
+#include <stdint.h>
+#include <string.h>
+
 #include "upb/hash/str_table.h"
+#include "upb/mem/arena.h"
 #include "upb/mini_table/extension.h"
+#include "upb/mini_table/message.h"
 
 // Must be last.
 #include "upb/port/def.inc"
@@ -36,7 +42,7 @@
 UPB_API bool upb_ExtensionRegistry_Add(upb_ExtensionRegistry* r,
                                        const upb_MiniTableExtension* e) {
   char buf[EXTREG_KEY_SIZE];
-  extreg_key(buf, e->extendee, e->field.number);
+  extreg_key(buf, e->UPB_PRIVATE(extendee), upb_MiniTableExtension_Number(e));
   if (upb_strtable_lookup2(&r->exts, buf, EXTREG_KEY_SIZE, NULL)) return false;
   return upb_strtable_insert(&r->exts, buf, EXTREG_KEY_SIZE,
                              upb_value_constptr(e), r->arena);
@@ -57,7 +63,8 @@
   for (end = e, e = start; e < end; e++) {
     const upb_MiniTableExtension* ext = *e;
     char buf[EXTREG_KEY_SIZE];
-    extreg_key(buf, ext->extendee, ext->field.number);
+    extreg_key(buf, ext->UPB_PRIVATE(extendee),
+               upb_MiniTableExtension_Number(ext));
     upb_strtable_remove2(&r->exts, buf, EXTREG_KEY_SIZE, NULL);
   }
   return false;
diff --git a/upb/mini_table/internal/extension.h b/upb/mini_table/internal/extension.h
index f052fe6..b059324 100644
--- a/upb/mini_table/internal/extension.h
+++ b/upb/mini_table/internal/extension.h
@@ -8,6 +8,8 @@
 #ifndef UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
 #define UPB_MINI_TABLE_INTERNAL_EXTENSION_H_
 
+#include <stdint.h>
+
 #include "upb/mini_table/internal/field.h"
 #include "upb/mini_table/internal/sub.h"
 
@@ -16,12 +18,41 @@
 
 struct upb_MiniTableExtension {
   // Do not move this field. We need to be able to alias pointers.
-  struct upb_MiniTableField field;
+  struct upb_MiniTableField UPB_PRIVATE(field);
 
-  const struct upb_MiniTable* extendee;
-  union upb_MiniTableSub sub;  // NULL unless submessage or proto2 enum
+  const struct upb_MiniTable* UPB_PRIVATE(extendee);
+  union upb_MiniTableSub UPB_PRIVATE(sub);  // NULL unless submsg or proto2 enum
 };
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+UPB_INLINE const struct upb_MiniTableField* UPB_PRIVATE(
+    _upb_MiniTableExtension_AsField)(const struct upb_MiniTableExtension* e) {
+  return (const struct upb_MiniTableField*)&e->UPB_PRIVATE(field);
+}
+
+UPB_INLINE uint32_t UPB_PRIVATE(_upb_MiniTableExtension_Number)(
+    const struct upb_MiniTableExtension* e) {
+  return e->UPB_PRIVATE(field).number;
+}
+
+UPB_INLINE const struct upb_MiniTable* UPB_PRIVATE(
+    _upb_MiniTableExtension_GetSubMessage)(
+    const struct upb_MiniTableExtension* e) {
+  return e->UPB_PRIVATE(sub).submsg;
+}
+
+UPB_INLINE void UPB_PRIVATE(_upb_MiniTableExtension_SetSubMessage)(
+    struct upb_MiniTableExtension* e, const struct upb_MiniTable* m) {
+  e->UPB_PRIVATE(sub).submsg = m;
+}
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
 #include "upb/port/undef.inc"
 
 #endif /* UPB_MINI_TABLE_INTERNAL_EXTENSION_H_ */
diff --git a/upb/reflection/field_def.c b/upb/reflection/field_def.c
index 87d989e..a6d287c 100644
--- a/upb/reflection/field_def.c
+++ b/upb/reflection/field_def.c
@@ -728,7 +728,8 @@
   f->layout_index = ctx->ext_count++;
 
   if (ctx->layout) {
-    UPB_ASSERT(_upb_FieldDef_ExtensionMiniTable(f)->field.number == f->number_);
+    UPB_ASSERT(upb_MiniTableExtension_Number(
+                   _upb_FieldDef_ExtensionMiniTable(f)) == f->number_);
   }
 }
 
@@ -923,7 +924,7 @@
   const upb_MiniTableExtension* ext = _upb_FieldDef_ExtensionMiniTable(f);
 
   if (ctx->layout) {
-    UPB_ASSERT(upb_FieldDef_Number(f) == ext->field.number);
+    UPB_ASSERT(upb_FieldDef_Number(f) == upb_MiniTableExtension_Number(ext));
   } else {
     upb_StringView desc;
     if (!upb_FieldDef_MiniDescriptorEncode(f, ctx->tmp_arena, &desc)) {
diff --git a/upb/test/BUILD b/upb/test/BUILD
index 93661f4..e07b8d5 100644
--- a/upb/test/BUILD
+++ b/upb/test/BUILD
@@ -164,6 +164,7 @@
     visibility = ["//upb:__subpackages__"],
     deps = [
         "//upb:base",
+        "//upb:mem",
         "//upb:message",
         "//upb:mini_descriptor",
         "//upb:mini_table",
diff --git a/upb/test/fuzz_util.cc b/upb/test/fuzz_util.cc
index 714fcac..299ab24 100644
--- a/upb/test/fuzz_util.cc
+++ b/upb/test/fuzz_util.cc
@@ -7,11 +7,20 @@
 
 #include "upb/test/fuzz_util.h"
 
+#include <stddef.h>
+
+#include <vector>
+
+#include "upb/base/descriptor_constants.h"
 #include "upb/base/status.hpp"
-#include "upb/message/message.h"
+#include "upb/mem/arena.h"
 #include "upb/mini_descriptor/decode.h"
+#include "upb/mini_table/enum.h"
 #include "upb/mini_table/extension.h"
 #include "upb/mini_table/extension_registry.h"
+#include "upb/mini_table/field.h"
+#include "upb/mini_table/message.h"
+#include "upb/mini_table/sub.h"
 
 // Must be last
 #include "upb/port/def.inc"
@@ -87,16 +96,17 @@
 }
 
 bool Builder::LinkExtension(upb_MiniTableExtension* ext) {
-  upb_MiniTableField* field = &ext->field;
+  upb_MiniTableField* field =
+      (upb_MiniTableField*)upb_MiniTableExtension_AsField(ext);
   if (upb_MiniTableField_CType(field) == kUpb_CType_Message) {
     auto mt = NextMiniTable();
     if (!mt) field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_Int32;
-    ext->sub.submsg = mt;
+    ext->UPB_PRIVATE(sub).submsg = mt;
   }
   if (upb_MiniTableField_IsClosedEnum(field)) {
     auto et = NextEnumTable();
     if (!et) field->UPB_PRIVATE(descriptortype) = kUpb_FieldType_Int32;
-    ext->sub.subenum = et;
+    ext->UPB_PRIVATE(sub).subenum = et;
   }
   return true;
 }
@@ -120,7 +130,8 @@
                                         status.ptr());
       if (!ptr) break;
       if (!LinkExtension(ext)) continue;
-      if (upb_ExtensionRegistry_Lookup(*exts, ext->extendee, ext->field.number))
+      if (upb_ExtensionRegistry_Lookup(*exts, ext->UPB_PRIVATE(extendee),
+                                       upb_MiniTableExtension_Number(ext)))
         continue;
       upb_ExtensionRegistry_AddArray(
           *exts, const_cast<const upb_MiniTableExtension**>(&ext), 1);
diff --git a/upb/wire/decode.c b/upb/wire/decode.c
index c2525ea..4706891 100644
--- a/upb/wire/decode.c
+++ b/upb/wire/decode.c
@@ -783,9 +783,11 @@
     _upb_Decoder_ErrorJmp(d, kUpb_DecodeStatus_OutOfMemory);
   }
   upb_Message* submsg = _upb_Decoder_NewSubMessage(
-      d, &ext->ext->sub, &ext->ext->field, (upb_TaggedMessagePtr*)&ext->data);
-  upb_DecodeStatus status = upb_Decode(data, size, submsg, item_mt->sub.submsg,
-                                       d->extreg, d->options, &d->arena);
+      d, &ext->ext->UPB_PRIVATE(sub), upb_MiniTableExtension_AsField(ext->ext),
+      (upb_TaggedMessagePtr*)&ext->data);
+  upb_DecodeStatus status = upb_Decode(
+      data, size, submsg, upb_MiniTableExtension_GetSubMessage(item_mt),
+      d->extreg, d->options, &d->arena);
   if (status != kUpb_DecodeStatus_Ok) _upb_Decoder_ErrorJmp(d, status);
 }
 
@@ -915,7 +917,7 @@
       case kUpb_ExtMode_Extendable: {
         const upb_MiniTableExtension* ext =
             upb_ExtensionRegistry_Lookup(d->extreg, t, field_number);
-        if (ext) return &ext->field;
+        if (ext) return upb_MiniTableExtension_AsField(ext);
         break;
       }
       case kUpb_ExtMode_IsMessageSet:
@@ -1123,7 +1125,7 @@
     }
     d->unknown_msg = msg;
     msg = &ext->data;
-    subs = &ext->ext->sub;
+    subs = &ext->ext->UPB_PRIVATE(sub);
   }
 
   switch (mode & kUpb_FieldMode_Mask) {
diff --git a/upb/wire/encode.c b/upb/wire/encode.c
index 212ec05..40aeea2 100644
--- a/upb/wire/encode.c
+++ b/upb/wire/encode.c
@@ -28,6 +28,7 @@
 #include "upb/message/internal/map_sorter.h"
 #include "upb/message/message.h"
 #include "upb/message/tagged_ptr.h"
+#include "upb/mini_table/extension.h"
 #include "upb/mini_table/field.h"
 #include "upb/mini_table/internal/field.h"
 #include "upb/mini_table/internal/message.h"
@@ -514,10 +515,11 @@
                                const upb_Message_Extension* ext) {
   size_t size;
   encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_EndGroup);
-  encode_message(e, ext->data.ptr, ext->ext->sub.submsg, &size);
+  encode_message(e, ext->data.ptr,
+                 upb_MiniTableExtension_GetSubMessage(ext->ext), &size);
   encode_varint(e, size);
   encode_tag(e, kUpb_MsgSet_Message, kUpb_WireType_Delimited);
-  encode_varint(e, ext->ext->field.number);
+  encode_varint(e, upb_MiniTableExtension_Number(ext->ext));
   encode_tag(e, kUpb_MsgSet_TypeId, kUpb_WireType_Varint);
   encode_tag(e, kUpb_MsgSet_Item, kUpb_WireType_StartGroup);
 }
@@ -527,7 +529,8 @@
   if (UPB_UNLIKELY(is_message_set)) {
     encode_msgset_item(e, ext);
   } else {
-    encode_field(e, &ext->data, &ext->ext->sub, &ext->ext->field);
+    encode_field(e, &ext->data, &ext->ext->UPB_PRIVATE(sub),
+                 &ext->ext->UPB_PRIVATE(field));
   }
 }
 
diff --git a/upb_generator/protoc-gen-upb.cc b/upb_generator/protoc-gen-upb.cc
index f5c5056..f764cd1 100644
--- a/upb_generator/protoc-gen-upb.cc
+++ b/upb_generator/protoc-gen-upb.cc
@@ -282,8 +282,8 @@
         R"cc(
           UPB_INLINE $0 $1_$2(const struct $3* msg) {
             const upb_MiniTableExtension* ext = &$4;
-            UPB_ASSUME(!upb_MiniTableField_IsRepeatedOrMap(&ext->field));
-            UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->field) == $5);
+            UPB_ASSUME(!upb_MiniTableField_IsRepeatedOrMap(&ext->UPB_PRIVATE(field)));
+            UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->UPB_PRIVATE(field)) == $5);
             $0 default_val = $6;
             $0 ret;
             _upb_Message_GetExtensionField(msg, ext, &default_val, &ret);
@@ -297,8 +297,8 @@
         R"cc(
           UPB_INLINE void $1_set_$2(struct $3* msg, $0 val, upb_Arena* arena) {
             const upb_MiniTableExtension* ext = &$4;
-            UPB_ASSUME(!upb_MiniTableField_IsRepeatedOrMap(&ext->field));
-            UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->field) == $5);
+            UPB_ASSUME(!upb_MiniTableField_IsRepeatedOrMap(&ext->UPB_PRIVATE(field)));
+            UPB_ASSUME(_upb_MiniTableField_GetRep(&ext->UPB_PRIVATE(field)) == $5);
             bool ok = _upb_Message_SetExtensionField(msg, ext, &val, arena);
             UPB_ASSERT(ok);
           }