Fix `upb_MiniTableField_CType()` to work correctly for enums & strings.

`upb_MiniTableField_CType()` was directly checking the `descriptortype` in `upb_MiniTableField`, without taking `field->mode` into account -- which can indicate that an int32 is actually an enum, or that bytes is really a string.

PiperOrigin-RevId: 537975302
diff --git a/upb/mini_table/common.c b/upb/mini_table/common.c
index 63520cc..c0f89f9 100644
--- a/upb/mini_table/common.c
+++ b/upb/mini_table/common.c
@@ -82,19 +82,6 @@
   return NULL;
 }
 
-upb_FieldType upb_MiniTableField_Type(const upb_MiniTableField* field) {
-  if (field->mode & kUpb_LabelFlags_IsAlternate) {
-    if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Int32) {
-      return kUpb_FieldType_Enum;
-    } else if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes) {
-      return kUpb_FieldType_String;
-    } else {
-      UPB_ASSERT(false);
-    }
-  }
-  return field->UPB_PRIVATE(descriptortype);
-}
-
 static bool upb_MiniTable_Is_Oneof(const upb_MiniTableField* f) {
   return f->presence < 0;
 }
diff --git a/upb/mini_table/common.h b/upb/mini_table/common.h
index d72d514..c3bc5b7 100644
--- a/upb/mini_table/common.h
+++ b/upb/mini_table/common.h
@@ -61,10 +61,22 @@
   return &t->fields[index];
 }
 
-UPB_API upb_FieldType upb_MiniTableField_Type(const upb_MiniTableField* field);
+UPB_API_INLINE upb_FieldType
+upb_MiniTableField_Type(const upb_MiniTableField* field) {
+  if (field->mode & kUpb_LabelFlags_IsAlternate) {
+    if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Int32) {
+      return kUpb_FieldType_Enum;
+    } else if (field->UPB_PRIVATE(descriptortype) == kUpb_FieldType_Bytes) {
+      return kUpb_FieldType_String;
+    } else {
+      UPB_ASSERT(false);
+    }
+  }
+  return (upb_FieldType)field->UPB_PRIVATE(descriptortype);
+}
 
 UPB_API_INLINE upb_CType upb_MiniTableField_CType(const upb_MiniTableField* f) {
-  switch (f->UPB_PRIVATE(descriptortype)) {
+  switch (upb_MiniTableField_Type(f)) {
     case kUpb_FieldType_Double:
       return kUpb_CType_Double;
     case kUpb_FieldType_Float:
diff --git a/upb/reflection/message_def.c b/upb/reflection/message_def.c
index a45f339..ff5c1e5 100644
--- a/upb/reflection/message_def.c
+++ b/upb/reflection/message_def.c
@@ -499,6 +499,7 @@
     UPB_ASSERT(layout_index < m->layout->field_count);
     const upb_MiniTableField* mt_f = &m->layout->fields[layout_index];
     UPB_ASSERT(upb_FieldDef_Type(f) == upb_MiniTableField_Type(mt_f));
+    UPB_ASSERT(upb_FieldDef_CType(f) == upb_MiniTableField_CType(mt_f));
     UPB_ASSERT(upb_FieldDef_HasPresence(f) ==
                upb_MiniTableField_HasPresence(mt_f));
   }