diff --git a/benchmarks/benchmark.cc b/benchmarks/benchmark.cc
index 60e3b53..b16cf47 100644
--- a/benchmarks/benchmark.cc
+++ b/benchmarks/benchmark.cc
@@ -163,7 +163,7 @@
     upb_benchmark_FileDescriptorProto* set =
         upb_benchmark_FileDescriptorProto_parse_ex(
             descriptor.data, descriptor.size, NULL,
-            Copy == Alias ? UPB_DECODE_ALIAS : 0, arena);
+            Copy == Alias ? kUpb_DecodeOption_AliasString : 0, arena);
     if (!set) {
       printf("Failed to parse.\n");
       exit(1);
diff --git a/cmake/google/protobuf/descriptor.upb.c b/cmake/google/protobuf/descriptor.upb.c
index 007d651..3782fb4 100644
--- a/cmake/google/protobuf/descriptor.upb.c
+++ b/cmake/google/protobuf/descriptor.upb.c
@@ -23,7 +23,7 @@
 const upb_msglayout google_protobuf_FileDescriptorSet_msginit = {
   &google_protobuf_FileDescriptorSet_submsgs[0],
   &google_protobuf_FileDescriptorSet__fields[0],
-  0, UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255,
+  UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_FileDescriptorProto_submsgs[6] = {
@@ -53,7 +53,7 @@
 const upb_msglayout google_protobuf_FileDescriptorProto_msginit = {
   &google_protobuf_FileDescriptorProto_submsgs[0],
   &google_protobuf_FileDescriptorProto__fields[0],
-  0, UPB_SIZE(64, 128), 12, _UPB_MSGEXT_NONE, 12, 255,
+  UPB_SIZE(64, 128), 12, _UPB_MSGEXT_NONE, 12, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_DescriptorProto_submsgs[7] = {
@@ -82,7 +82,7 @@
 const upb_msglayout google_protobuf_DescriptorProto_msginit = {
   &google_protobuf_DescriptorProto_submsgs[0],
   &google_protobuf_DescriptorProto__fields[0],
-  0, UPB_SIZE(48, 96), 10, _UPB_MSGEXT_NONE, 10, 255,
+  UPB_SIZE(48, 96), 10, _UPB_MSGEXT_NONE, 10, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = {
@@ -98,7 +98,7 @@
 const upb_msglayout google_protobuf_DescriptorProto_ExtensionRange_msginit = {
   &google_protobuf_DescriptorProto_ExtensionRange_submsgs[0],
   &google_protobuf_DescriptorProto_ExtensionRange__fields[0],
-  0, UPB_SIZE(16, 24), 3, _UPB_MSGEXT_NONE, 3, 255,
+  UPB_SIZE(16, 24), 3, _UPB_MSGEXT_NONE, 3, 255, 0,
 };
 
 static const upb_msglayout_field google_protobuf_DescriptorProto_ReservedRange__fields[2] = {
@@ -109,7 +109,7 @@
 const upb_msglayout google_protobuf_DescriptorProto_ReservedRange_msginit = {
   NULL,
   &google_protobuf_DescriptorProto_ReservedRange__fields[0],
-  0, UPB_SIZE(16, 16), 2, _UPB_MSGEXT_NONE, 2, 255,
+  UPB_SIZE(16, 16), 2, _UPB_MSGEXT_NONE, 2, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_ExtensionRangeOptions_submsgs[1] = {
@@ -123,7 +123,7 @@
 const upb_msglayout google_protobuf_ExtensionRangeOptions_msginit = {
   &google_protobuf_ExtensionRangeOptions_submsgs[0],
   &google_protobuf_ExtensionRangeOptions__fields[0],
-  0, UPB_SIZE(8, 8), 1, _UPB_MSGEXT_EXTENDABLE, 0, 255,
+  UPB_SIZE(8, 8), 1, _UPB_MSGEXT_EXTENDABLE, 0, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_FieldDescriptorProto_submsgs[3] = {
@@ -149,7 +149,7 @@
 const upb_msglayout google_protobuf_FieldDescriptorProto_msginit = {
   &google_protobuf_FieldDescriptorProto_submsgs[0],
   &google_protobuf_FieldDescriptorProto__fields[0],
-  0, UPB_SIZE(72, 112), 11, _UPB_MSGEXT_NONE, 10, 255,
+  UPB_SIZE(72, 112), 11, _UPB_MSGEXT_NONE, 10, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_OneofDescriptorProto_submsgs[1] = {
@@ -164,7 +164,7 @@
 const upb_msglayout google_protobuf_OneofDescriptorProto_msginit = {
   &google_protobuf_OneofDescriptorProto_submsgs[0],
   &google_protobuf_OneofDescriptorProto__fields[0],
-  0, UPB_SIZE(16, 32), 2, _UPB_MSGEXT_NONE, 2, 255,
+  UPB_SIZE(16, 32), 2, _UPB_MSGEXT_NONE, 2, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_EnumDescriptorProto_submsgs[3] = {
@@ -184,7 +184,7 @@
 const upb_msglayout google_protobuf_EnumDescriptorProto_msginit = {
   &google_protobuf_EnumDescriptorProto_submsgs[0],
   &google_protobuf_EnumDescriptorProto__fields[0],
-  0, UPB_SIZE(32, 64), 5, _UPB_MSGEXT_NONE, 5, 255,
+  UPB_SIZE(32, 64), 5, _UPB_MSGEXT_NONE, 5, 255, 0,
 };
 
 static const upb_msglayout_field google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[2] = {
@@ -195,7 +195,7 @@
 const upb_msglayout google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit = {
   NULL,
   &google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[0],
-  0, UPB_SIZE(16, 16), 2, _UPB_MSGEXT_NONE, 2, 255,
+  UPB_SIZE(16, 16), 2, _UPB_MSGEXT_NONE, 2, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_EnumValueDescriptorProto_submsgs[1] = {
@@ -211,7 +211,7 @@
 const upb_msglayout google_protobuf_EnumValueDescriptorProto_msginit = {
   &google_protobuf_EnumValueDescriptorProto_submsgs[0],
   &google_protobuf_EnumValueDescriptorProto__fields[0],
-  0, UPB_SIZE(24, 32), 3, _UPB_MSGEXT_NONE, 3, 255,
+  UPB_SIZE(24, 32), 3, _UPB_MSGEXT_NONE, 3, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_ServiceDescriptorProto_submsgs[2] = {
@@ -228,7 +228,7 @@
 const upb_msglayout google_protobuf_ServiceDescriptorProto_msginit = {
   &google_protobuf_ServiceDescriptorProto_submsgs[0],
   &google_protobuf_ServiceDescriptorProto__fields[0],
-  0, UPB_SIZE(24, 48), 3, _UPB_MSGEXT_NONE, 3, 255,
+  UPB_SIZE(24, 48), 3, _UPB_MSGEXT_NONE, 3, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_MethodDescriptorProto_submsgs[1] = {
@@ -247,7 +247,7 @@
 const upb_msglayout google_protobuf_MethodDescriptorProto_msginit = {
   &google_protobuf_MethodDescriptorProto_submsgs[0],
   &google_protobuf_MethodDescriptorProto__fields[0],
-  0, UPB_SIZE(32, 64), 6, _UPB_MSGEXT_NONE, 6, 255,
+  UPB_SIZE(32, 64), 6, _UPB_MSGEXT_NONE, 6, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_FileOptions_submsgs[2] = {
@@ -282,7 +282,7 @@
 const upb_msglayout google_protobuf_FileOptions_msginit = {
   &google_protobuf_FileOptions_submsgs[0],
   &google_protobuf_FileOptions__fields[0],
-  0, UPB_SIZE(104, 192), 21, _UPB_MSGEXT_EXTENDABLE, 1, 255,
+  UPB_SIZE(104, 192), 21, _UPB_MSGEXT_EXTENDABLE, 1, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_MessageOptions_submsgs[1] = {
@@ -300,7 +300,7 @@
 const upb_msglayout google_protobuf_MessageOptions_msginit = {
   &google_protobuf_MessageOptions_submsgs[0],
   &google_protobuf_MessageOptions__fields[0],
-  0, UPB_SIZE(16, 16), 5, _UPB_MSGEXT_EXTENDABLE, 3, 255,
+  UPB_SIZE(16, 16), 5, _UPB_MSGEXT_EXTENDABLE, 3, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_FieldOptions_submsgs[3] = {
@@ -322,7 +322,7 @@
 const upb_msglayout google_protobuf_FieldOptions_msginit = {
   &google_protobuf_FieldOptions_submsgs[0],
   &google_protobuf_FieldOptions__fields[0],
-  0, UPB_SIZE(24, 24), 7, _UPB_MSGEXT_EXTENDABLE, 3, 255,
+  UPB_SIZE(24, 24), 7, _UPB_MSGEXT_EXTENDABLE, 3, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_OneofOptions_submsgs[1] = {
@@ -336,7 +336,7 @@
 const upb_msglayout google_protobuf_OneofOptions_msginit = {
   &google_protobuf_OneofOptions_submsgs[0],
   &google_protobuf_OneofOptions__fields[0],
-  0, UPB_SIZE(8, 8), 1, _UPB_MSGEXT_EXTENDABLE, 0, 255,
+  UPB_SIZE(8, 8), 1, _UPB_MSGEXT_EXTENDABLE, 0, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_EnumOptions_submsgs[1] = {
@@ -352,7 +352,7 @@
 const upb_msglayout google_protobuf_EnumOptions_msginit = {
   &google_protobuf_EnumOptions_submsgs[0],
   &google_protobuf_EnumOptions__fields[0],
-  0, UPB_SIZE(8, 16), 3, _UPB_MSGEXT_EXTENDABLE, 0, 255,
+  UPB_SIZE(8, 16), 3, _UPB_MSGEXT_EXTENDABLE, 0, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_EnumValueOptions_submsgs[1] = {
@@ -367,7 +367,7 @@
 const upb_msglayout google_protobuf_EnumValueOptions_msginit = {
   &google_protobuf_EnumValueOptions_submsgs[0],
   &google_protobuf_EnumValueOptions__fields[0],
-  0, UPB_SIZE(8, 16), 2, _UPB_MSGEXT_EXTENDABLE, 1, 255,
+  UPB_SIZE(8, 16), 2, _UPB_MSGEXT_EXTENDABLE, 1, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_ServiceOptions_submsgs[1] = {
@@ -382,7 +382,7 @@
 const upb_msglayout google_protobuf_ServiceOptions_msginit = {
   &google_protobuf_ServiceOptions_submsgs[0],
   &google_protobuf_ServiceOptions__fields[0],
-  0, UPB_SIZE(8, 16), 2, _UPB_MSGEXT_EXTENDABLE, 0, 255,
+  UPB_SIZE(8, 16), 2, _UPB_MSGEXT_EXTENDABLE, 0, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_MethodOptions_submsgs[2] = {
@@ -399,7 +399,7 @@
 const upb_msglayout google_protobuf_MethodOptions_msginit = {
   &google_protobuf_MethodOptions_submsgs[0],
   &google_protobuf_MethodOptions__fields[0],
-  0, UPB_SIZE(16, 24), 3, _UPB_MSGEXT_EXTENDABLE, 0, 255,
+  UPB_SIZE(16, 24), 3, _UPB_MSGEXT_EXTENDABLE, 0, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_UninterpretedOption_submsgs[1] = {
@@ -419,7 +419,7 @@
 const upb_msglayout google_protobuf_UninterpretedOption_msginit = {
   &google_protobuf_UninterpretedOption_submsgs[0],
   &google_protobuf_UninterpretedOption__fields[0],
-  0, UPB_SIZE(64, 96), 7, _UPB_MSGEXT_NONE, 0, 255,
+  UPB_SIZE(64, 96), 7, _UPB_MSGEXT_NONE, 0, 255, 0,
 };
 
 static const upb_msglayout_field google_protobuf_UninterpretedOption_NamePart__fields[2] = {
@@ -430,7 +430,7 @@
 const upb_msglayout google_protobuf_UninterpretedOption_NamePart_msginit = {
   NULL,
   &google_protobuf_UninterpretedOption_NamePart__fields[0],
-  6, UPB_SIZE(16, 32), 2, _UPB_MSGEXT_NONE, 2, 255,
+  UPB_SIZE(16, 32), 2, _UPB_MSGEXT_NONE, 2, 255, 2,
 };
 
 static const upb_msglayout_sub google_protobuf_SourceCodeInfo_submsgs[1] = {
@@ -444,7 +444,7 @@
 const upb_msglayout google_protobuf_SourceCodeInfo_msginit = {
   &google_protobuf_SourceCodeInfo_submsgs[0],
   &google_protobuf_SourceCodeInfo__fields[0],
-  0, UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255,
+  UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255, 0,
 };
 
 static const upb_msglayout_field google_protobuf_SourceCodeInfo_Location__fields[5] = {
@@ -458,7 +458,7 @@
 const upb_msglayout google_protobuf_SourceCodeInfo_Location_msginit = {
   NULL,
   &google_protobuf_SourceCodeInfo_Location__fields[0],
-  0, UPB_SIZE(32, 64), 5, _UPB_MSGEXT_NONE, 4, 255,
+  UPB_SIZE(32, 64), 5, _UPB_MSGEXT_NONE, 4, 255, 0,
 };
 
 static const upb_msglayout_sub google_protobuf_GeneratedCodeInfo_submsgs[1] = {
@@ -472,7 +472,7 @@
 const upb_msglayout google_protobuf_GeneratedCodeInfo_msginit = {
   &google_protobuf_GeneratedCodeInfo_submsgs[0],
   &google_protobuf_GeneratedCodeInfo__fields[0],
-  0, UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255,
+  UPB_SIZE(8, 8), 1, _UPB_MSGEXT_NONE, 1, 255, 0,
 };
 
 static const upb_msglayout_field google_protobuf_GeneratedCodeInfo_Annotation__fields[4] = {
@@ -485,7 +485,7 @@
 const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit = {
   NULL,
   &google_protobuf_GeneratedCodeInfo_Annotation__fields[0],
-  0, UPB_SIZE(24, 48), 4, _UPB_MSGEXT_NONE, 4, 255,
+  UPB_SIZE(24, 48), 4, _UPB_MSGEXT_NONE, 4, 255, 0,
 };
 
 static const upb_msglayout *messages_layout[27] = {
@@ -518,21 +518,15 @@
   &google_protobuf_GeneratedCodeInfo_Annotation_msginit,
 };
 
-const upb_enumlayout google_protobuf_FieldDescriptorProto_Type_enuminit = {
-  NULL,
-  0x7fffeULL,
-  0,
-};
-
 const upb_enumlayout google_protobuf_FieldDescriptorProto_Label_enuminit = {
   NULL,
   0xeULL,
   0,
 };
 
-const upb_enumlayout google_protobuf_FileOptions_OptimizeMode_enuminit = {
+const upb_enumlayout google_protobuf_FieldDescriptorProto_Type_enuminit = {
   NULL,
-  0xeULL,
+  0x7fffeULL,
   0,
 };
 
@@ -548,6 +542,12 @@
   0,
 };
 
+const upb_enumlayout google_protobuf_FileOptions_OptimizeMode_enuminit = {
+  NULL,
+  0xeULL,
+  0,
+};
+
 const upb_enumlayout google_protobuf_MethodOptions_IdempotencyLevel_enuminit = {
   NULL,
   0x7ULL,
@@ -555,11 +555,11 @@
 };
 
 static const upb_enumlayout *enums_layout[6] = {
-  &google_protobuf_FieldDescriptorProto_Type_enuminit,
   &google_protobuf_FieldDescriptorProto_Label_enuminit,
-  &google_protobuf_FileOptions_OptimizeMode_enuminit,
+  &google_protobuf_FieldDescriptorProto_Type_enuminit,
   &google_protobuf_FieldOptions_CType_enuminit,
   &google_protobuf_FieldOptions_JSType_enuminit,
+  &google_protobuf_FileOptions_OptimizeMode_enuminit,
   &google_protobuf_MethodOptions_IdempotencyLevel_enuminit,
 };
 
diff --git a/cmake/google/protobuf/descriptor.upb.h b/cmake/google/protobuf/descriptor.upb.h
index f3d7963..c0bdc9e 100644
--- a/cmake/google/protobuf/descriptor.upb.h
+++ b/cmake/google/protobuf/descriptor.upb.h
@@ -103,6 +103,12 @@
 extern const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit;
 
 typedef enum {
+  google_protobuf_FieldDescriptorProto_LABEL_OPTIONAL = 1,
+  google_protobuf_FieldDescriptorProto_LABEL_REQUIRED = 2,
+  google_protobuf_FieldDescriptorProto_LABEL_REPEATED = 3
+} google_protobuf_FieldDescriptorProto_Label;
+
+typedef enum {
   google_protobuf_FieldDescriptorProto_TYPE_DOUBLE = 1,
   google_protobuf_FieldDescriptorProto_TYPE_FLOAT = 2,
   google_protobuf_FieldDescriptorProto_TYPE_INT64 = 3,
@@ -124,18 +130,6 @@
 } google_protobuf_FieldDescriptorProto_Type;
 
 typedef enum {
-  google_protobuf_FieldDescriptorProto_LABEL_OPTIONAL = 1,
-  google_protobuf_FieldDescriptorProto_LABEL_REQUIRED = 2,
-  google_protobuf_FieldDescriptorProto_LABEL_REPEATED = 3
-} google_protobuf_FieldDescriptorProto_Label;
-
-typedef enum {
-  google_protobuf_FileOptions_SPEED = 1,
-  google_protobuf_FileOptions_CODE_SIZE = 2,
-  google_protobuf_FileOptions_LITE_RUNTIME = 3
-} google_protobuf_FileOptions_OptimizeMode;
-
-typedef enum {
   google_protobuf_FieldOptions_STRING = 0,
   google_protobuf_FieldOptions_CORD = 1,
   google_protobuf_FieldOptions_STRING_PIECE = 2
@@ -148,17 +142,23 @@
 } google_protobuf_FieldOptions_JSType;
 
 typedef enum {
+  google_protobuf_FileOptions_SPEED = 1,
+  google_protobuf_FileOptions_CODE_SIZE = 2,
+  google_protobuf_FileOptions_LITE_RUNTIME = 3
+} google_protobuf_FileOptions_OptimizeMode;
+
+typedef enum {
   google_protobuf_MethodOptions_IDEMPOTENCY_UNKNOWN = 0,
   google_protobuf_MethodOptions_NO_SIDE_EFFECTS = 1,
   google_protobuf_MethodOptions_IDEMPOTENT = 2
 } google_protobuf_MethodOptions_IdempotencyLevel;
 
 
-extern const upb_enumlayout google_protobuf_FieldDescriptorProto_Type_enuminit;
 extern const upb_enumlayout google_protobuf_FieldDescriptorProto_Label_enuminit;
-extern const upb_enumlayout google_protobuf_FileOptions_OptimizeMode_enuminit;
+extern const upb_enumlayout google_protobuf_FieldDescriptorProto_Type_enuminit;
 extern const upb_enumlayout google_protobuf_FieldOptions_CType_enuminit;
 extern const upb_enumlayout google_protobuf_FieldOptions_JSType_enuminit;
+extern const upb_enumlayout google_protobuf_FileOptions_OptimizeMode_enuminit;
 extern const upb_enumlayout google_protobuf_MethodOptions_IdempotencyLevel_enuminit;
 
 /* google.protobuf.FileDescriptorSet */
diff --git a/tests/conformance_upb.c b/tests/conformance_upb.c
index 6330433..dd21c9f 100644
--- a/tests/conformance_upb.c
+++ b/tests/conformance_upb.c
@@ -88,7 +88,7 @@
   upb_strview proto =
       conformance_ConformanceRequest_protobuf_payload(c->request);
   if (upb_decode(proto.data, proto.size, msg, upb_msgdef_layout(m), c->arena) ==
-      UPB_DECODE_OK) {
+      kUpb_DecodeStatus_Ok) {
     return true;
   } else {
     static const char msg[] = "Parse error";
diff --git a/upb/bindings/lua/def.c b/upb/bindings/lua/def.c
index bf3fbca..d5366ea 100644
--- a/upb/bindings/lua/def.c
+++ b/upb/bindings/lua/def.c
@@ -908,7 +908,6 @@
 }
 
 static int lupb_symtab_tostring(lua_State *L) {
-  const upb_symtab *s = lupb_symtab_check(L, 1);
   lua_pushfstring(L, "<upb.SymbolTable>");
   return 1;
 }
diff --git a/upb/bindings/lua/msg.c b/upb/bindings/lua/msg.c
index 530d9b3..6e47c2f 100644
--- a/upb/bindings/lua/msg.c
+++ b/upb/bindings/lua/msg.c
@@ -961,7 +961,7 @@
   buf = upb_arena_malloc(arena, len);
   memcpy(buf, pb, len);
 
-  ok = _upb_decode(buf, len, msg, layout, NULL, UPB_DECODE_ALIAS, arena) == 0;
+  ok = _upb_decode(buf, len, msg, layout, NULL, kUpb_DecodeOption_AliasString, arena) == 0;
 
   if (!ok) {
     lua_pushstring(L, "Error decoding protobuf.");
diff --git a/upb/decode.c b/upb/decode.c
index b5997ff..8fa69d5 100644
--- a/upb/decode.c
+++ b/upb/decode.c
@@ -189,7 +189,7 @@
 static const char *decode_msg(upb_decstate *d, const char *ptr, upb_msg *msg,
                               const upb_msglayout *layout);
 
-UPB_NORETURN static void *decode_err(upb_decstate *d, upb_decodestatus status) {
+UPB_NORETURN static void *decode_err(upb_decstate *d, upb_DecodeStatus status) {
   UPB_LONGJMP(d->err, status);
 }
 
@@ -198,13 +198,13 @@
   return NULL;
 }
 static void decode_verifyutf8(upb_decstate *d, const char *buf, int len) {
-  if (!decode_verifyutf8_inl(buf, len)) decode_err(d, UPB_DECODE_BAD_UTF8);
+  if (!decode_verifyutf8_inl(buf, len)) decode_err(d, kUpb_DecodeStatus_BadUtf8);
 }
 
 static bool decode_reserve(upb_decstate *d, upb_array *arr, size_t elem) {
   bool need_realloc = arr->size - arr->len < elem;
   if (need_realloc && !_upb_array_realloc(arr, arr->len + elem, &d->arena)) {
-    decode_err(d, UPB_DECODE_OOM);
+    decode_err(d, kUpb_DecodeStatus_OutOfMemory);
   }
   return need_realloc;
 }
@@ -240,7 +240,7 @@
     return ptr + 1;
   } else {
     decode_vret res = decode_longvarint64(ptr, byte);
-    if (!res.ptr) return decode_err(d, UPB_DECODE_MALFORMED);
+    if (!res.ptr) return decode_err(d, kUpb_DecodeStatus_Malformed);
     *val = res.val;
     return res.ptr;
   }
@@ -258,7 +258,7 @@
     ptr = res.ptr;
     *val = res.val;
     if (!ptr || *val > UINT32_MAX || ptr - start > 5) {
-      return decode_err(d, UPB_DECODE_MALFORMED);
+      return decode_err(d, kUpb_DecodeStatus_Malformed);
     }
     return ptr;
   }
@@ -308,11 +308,11 @@
 
 static const char *decode_readstr(upb_decstate *d, const char *ptr, int size,
                                   upb_strview *str) {
-  if (d->options & UPB_DECODE_ALIAS) {
+  if (d->options & kUpb_DecodeOption_AliasString) {
     str->data = ptr;
   } else {
     char *data =  upb_arena_malloc(&d->arena, size);
-    if (!data) return decode_err(d, UPB_DECODE_OOM);
+    if (!data) return decode_err(d, kUpb_DecodeStatus_OutOfMemory);
     memcpy(data, ptr, size);
     str->data = data;
   }
@@ -325,11 +325,11 @@
                                     upb_msg *submsg, const upb_msglayout *subl,
                                     int size) {
   int saved_delta = decode_pushlimit(d, ptr, size);
-  if (--d->depth < 0) return decode_err(d, UPB_DECODE_MAXDEPTH_EXCEEDED);
+  if (--d->depth < 0) return decode_err(d, kUpb_DecodeStatus_MaxDepthExceeded);
   if (!decode_isdone(d, &ptr)) {
     ptr = decode_msg(d, ptr, submsg, subl);
   }
-  if (d->end_group != DECODE_NOGROUP) return decode_err(d, UPB_DECODE_MALFORMED);
+  if (d->end_group != DECODE_NOGROUP) return decode_err(d, kUpb_DecodeStatus_Malformed);
   decode_poplimit(d, ptr, saved_delta);
   d->depth++;
   return ptr;
@@ -348,12 +348,12 @@
 static const char *decode_group(upb_decstate *d, const char *ptr,
                                 upb_msg *submsg, const upb_msglayout *subl,
                                 uint32_t number) {
-  if (--d->depth < 0) return decode_err(d, UPB_DECODE_MAXDEPTH_EXCEEDED);
+  if (--d->depth < 0) return decode_err(d, kUpb_DecodeStatus_MaxDepthExceeded);
   if (decode_isdone(d, &ptr)) {
-    return decode_err(d, UPB_DECODE_MALFORMED);
+    return decode_err(d, kUpb_DecodeStatus_Malformed);
   }
   ptr = decode_msg(d, ptr, submsg, subl);
-  if (d->end_group != number) return decode_err(d, UPB_DECODE_MALFORMED);
+  if (d->end_group != number) return decode_err(d, kUpb_DecodeStatus_Malformed);
   d->end_group = DECODE_NOGROUP;
   d->depth++;
   return ptr;
@@ -398,7 +398,7 @@
   end = encode_varint32(v, end);
 
   if (!_upb_msg_addunknown(msg, buf, end - buf, &d->arena)) {
-    decode_err(d, UPB_DECODE_OOM);
+    decode_err(d, kUpb_DecodeStatus_OutOfMemory);
   }
 
   return false;
@@ -429,7 +429,6 @@
   return ptr;
 }
 
-#include <stdio.h>
 UPB_FORCEINLINE
 static const char *decode_fixed_packed(upb_decstate *d, const char *ptr,
                                        upb_array *arr, wireval *val,
@@ -439,7 +438,7 @@
   size_t count = val->size >> lg2;
   if ((val->size & mask) != 0) {
     // Length isn't a round multiple of elem size.
-    return decode_err(d, UPB_DECODE_MALFORMED);
+    return decode_err(d, kUpb_DecodeStatus_Malformed);
   }
   decode_reserve(d, arr, count);
   void *mem = UPB_PTR_AT(_upb_array_ptr(arr), arr->len << lg2, void);
@@ -513,7 +512,7 @@
   } else {
     size_t lg2 = desctype_to_elem_size_lg2[field->descriptortype];
     arr = _upb_array_new(&d->arena, 4, lg2);
-    if (!arr) return decode_err(d, UPB_DECODE_OOM);
+    if (!arr) return decode_err(d, kUpb_DecodeStatus_OutOfMemory);
     *arrp = arr;
   }
 
@@ -551,7 +550,6 @@
     case OP_FIXPCK_LG2(3):
       return decode_fixed_packed(d, ptr, arr, val, field,
                                  op - OP_FIXPCK_LG2(0));
-        return decode_err(d, UPB_DECODE_MALFORMED); 
     case OP_VARPCK_LG2(0):
     case OP_VARPCK_LG2(2):
     case OP_VARPCK_LG2(3):
@@ -662,7 +660,7 @@
   }
 
   return ptr;
-} 
+}
 
 UPB_FORCEINLINE
 static bool decode_checkrequired(upb_decstate *d, const upb_msg *msg,
@@ -834,7 +832,7 @@
     default:
       break;
   }
-  return decode_err(d, UPB_DECODE_MALFORMED);
+  return decode_err(d, kUpb_DecodeStatus_Malformed);
 }
 
 UPB_FORCEINLINE
@@ -848,7 +846,7 @@
   if (UPB_UNLIKELY(mode & _UPB_MODE_IS_EXTENSION)) {
     const upb_msglayout_ext *ext_layout = (const upb_msglayout_ext*)field;
     upb_msg_ext *ext = _upb_msg_getorcreateext(msg, ext_layout, &d->arena);
-        if (UPB_UNLIKELY(!ext)) return decode_err(d, UPB_DECODE_OOM);
+        if (UPB_UNLIKELY(!ext)) return decode_err(d, kUpb_DecodeStatus_OutOfMemory);
     msg = &ext->data;
     subs = &ext->ext->sub;
   }
@@ -865,26 +863,54 @@
   }
 }
 
-UPB_FORCEINLINE
+static const char *decode_reverse_skip_varint(const char *ptr, uint64_t val) {
+  uint64_t seen = 0;
+  do {
+    ptr--;
+    seen <<= 7;
+    seen |= *ptr & 0x7f;
+  } while (seen != val);
+  return ptr;
+}
+
 static const char *decode_unknown(upb_decstate *d, const char *ptr,
                                   upb_msg *msg, int field_number, int wire_type,
-                                  wireval val, const char **field_start) {
-  if (field_number == 0) return decode_err(d, UPB_DECODE_MALFORMED);
+                                  wireval val) {
+  if (field_number == 0) return decode_err(d, kUpb_DecodeStatus_Malformed);
 
+  const char *start = ptr;
   if (wire_type == UPB_WIRE_TYPE_DELIMITED) ptr += val.size;
   if (msg) {
+    switch (wire_type) {
+      case UPB_WIRE_TYPE_VARINT:
+      case UPB_WIRE_TYPE_DELIMITED:
+        start--;
+        while (start[-1] & 0x80) start--;
+        break;
+      case UPB_WIRE_TYPE_32BIT:
+        start -= 4;
+        break;
+      case UPB_WIRE_TYPE_64BIT:
+        start -= 8;
+        break;
+      default:
+        break;
+    }
+
+    assert(start == d->debug_valstart);
+    start = decode_reverse_skip_varint(start, (field_number << 3) | wire_type);
+    assert(start == d->debug_tagstart);
+
     if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
-      d->unknown = *field_start;
+      d->unknown = start;
       d->unknown_msg = msg;
       ptr = decode_group(d, ptr, NULL, NULL, field_number);
+      start = d->unknown;
       d->unknown_msg = NULL;
-      *field_start = d->unknown;
-      // XXX: pointer could have flipped during decoding the group,
-      // ptr - d->unknown below will be borked.
+      d->unknown = NULL;
     }
-    if (!_upb_msg_addunknown(msg, *field_start, ptr - *field_start,
-                             &d->arena)) {
-      return decode_err(d, UPB_DECODE_OOM);
+    if (!_upb_msg_addunknown(msg, start, ptr - start, &d->arena)) {
+      return decode_err(d, kUpb_DecodeStatus_OutOfMemory);
     }
   } else if (wire_type == UPB_WIRE_TYPE_START_GROUP) {
     ptr = decode_group(d, ptr, NULL, NULL, field_number);
@@ -897,7 +923,6 @@
                               const upb_msglayout *layout) {
   int last_field_index = 0;
   while (true) {
-    const char *field_start = ptr;
     uint32_t tag;
     const upb_msglayout_field *field;
     int field_number;
@@ -905,11 +930,19 @@
     wireval val;
     int op;
 
+#ifndef NDEBUG
+    d->debug_tagstart = ptr;
+#endif
+
     UPB_ASSERT(ptr < d->limit_ptr);
     ptr = decode_tag(d, ptr, &tag);
     field_number = tag >> 3;
     wire_type = tag & 7;
 
+#ifndef NDEBUG
+    d->debug_valstart = ptr;
+#endif
+
     if (wire_type == UPB_WIRE_TYPE_END_GROUP) {
       d->end_group = field_number;
       return ptr;
@@ -923,8 +956,7 @@
     } else {
       switch (op) {
         case OP_UNKNOWN:
-          ptr = decode_unknown(d, ptr, msg, field_number, wire_type, val,
-                               &field_start);
+          ptr = decode_unknown(d, ptr, msg, field_number, wire_type, val);
           break;
         case OP_MSGSET_ITEM:
           ptr = decode_msgset(d, ptr, msg, layout);
@@ -942,7 +974,7 @@
     if (decode_tryfastdispatch(d, &ptr, msg, layout)) break;
   }
 
-  if (false && UPB_UNLIKELY(d->options & UPB_CHECK_REQUIRED) &&
+  if (UPB_UNLIKELY(d->options & kUpb_DecodeOption_CheckRequired) &&
       !decode_checkrequired(d, msg, layout)) {
     d->missing_required = true;
   }
@@ -958,31 +990,31 @@
   return decode_msg(d, ptr, msg, decode_totablep(table));
 }
 
-static upb_decodestatus decode_top(struct upb_decstate *d, const char *buf,
+static upb_DecodeStatus decode_top(struct upb_decstate *d, const char *buf,
                                    void *msg, const upb_msglayout *l) {
   if (!decode_tryfastdispatch(d, &buf, msg, l)) {
     decode_msg(d, buf, msg, l);
   }
-  if (d->end_group != DECODE_NOGROUP) return UPB_DECODE_MALFORMED;
-  if (d->missing_required) return UPB_DECODE_MISSING_REQUIRED;
-  return UPB_DECODE_OK;
+  if (d->end_group != DECODE_NOGROUP) return kUpb_DecodeStatus_Malformed;
+  if (d->missing_required) return kUpb_DecodeStatus_MissingRequired;
+  return kUpb_DecodeStatus_Ok;
 }
 
-upb_decodestatus _upb_decode(const char *buf, size_t size, void *msg,
+upb_DecodeStatus _upb_decode(const char *buf, size_t size, void *msg,
                              const upb_msglayout *l, const upb_extreg *extreg,
                              int options, upb_arena *arena) {
   upb_decstate state;
   unsigned depth = (unsigned)options >> 16;
 
   if (size == 0) {
-    return UPB_DECODE_OK;
+    return kUpb_DecodeStatus_Ok;
   } else if (size <= 16) {
     memset(&state.patch, 0, 32);
     memcpy(&state.patch, buf, size);
     buf = state.patch;
     state.end = buf + size;
     state.limit = 0;
-    options &= ~UPB_DECODE_ALIAS;  // Can't alias patch buf.
+    options &= ~kUpb_DecodeOption_AliasString;  // Can't alias patch buf.
   } else {
     state.end = buf + size - 16;
     state.limit = 16;
@@ -1000,7 +1032,7 @@
   state.arena.cleanup_metadata = arena->cleanup_metadata;
   state.arena.parent = arena;
 
-  upb_decodestatus status = UPB_SETJMP(state.err);
+  upb_DecodeStatus status = UPB_SETJMP(state.err);
   if (UPB_LIKELY(!status)) {
     status = decode_top(&state, buf, msg, l);
   }
diff --git a/upb/decode.h b/upb/decode.h
index 98bf884..ad8a915 100644
--- a/upb/decode.h
+++ b/upb/decode.h
@@ -44,7 +44,7 @@
 enum {
   /* If set, strings will alias the input buffer instead of copying into the
    * arena. */
-  UPB_DECODE_ALIAS = 1,
+  kUpb_DecodeOption_AliasString = 1,
 
   /* If set, the parse will return failure if any message is missing any required
    * fields when the message data ends.  The parse will still continue, and the
@@ -63,27 +63,29 @@
    *    incomplete sub-message.  For this reason, this check is only useful for
    *    implemting ParseFromString() semantics.  For MergeFromString(), a
    *    post-parse validation step will always be necessary. */
-  UPB_CHECK_REQUIRED = 2,
+  kUpb_DecodeOption_CheckRequired = 2,
 };
 
 #define UPB_DECODE_MAXDEPTH(depth) ((depth) << 16)
 
 typedef enum {
-  UPB_DECODE_OK = 0,
-  // UPB_CHECK_REQUIRED failed (see above), but the parse otherwise succeeded.
-  UPB_DECODE_MISSING_REQUIRED = 1,
-  UPB_DECODE_OOM = 2,               // Arena alloc failed.
-  UPB_DECODE_BAD_UTF8 = 3,          // String field had bad UTF-8.
-  UPB_DECODE_MAXDEPTH_EXCEEDED = 4,
-  UPB_DECODE_MALFORMED = 5,         // Binary data was malformed.
-} upb_decodestatus;
+  kUpb_DecodeStatus_Ok = 0,
+  kUpb_DecodeStatus_Malformed = 1,          // Wire format was corrupt
+  kUpb_DecodeStatus_OutOfMemory = 2,        // Arena alloc failed
+  kUpb_DecodeStatus_BadUtf8 = 3,            // String field had bad UTF-8
+  kUpb_DecodeStatus_MaxDepthExceeded = 4,   // Exceeded UPB_DECODE_MAXDEPTH
 
-upb_decodestatus _upb_decode(const char *buf, size_t size, upb_msg *msg,
+  // kUpb_DecodeOption_CheckRequired failed (see above), but the parse otherwise
+  // succeeded.
+  kUpb_DecodeStatus_MissingRequired = 5,
+} upb_DecodeStatus;
+
+upb_DecodeStatus _upb_decode(const char *buf, size_t size, upb_msg *msg,
                              const upb_msglayout *l, const upb_extreg *extreg,
                              int options, upb_arena *arena);
 
 UPB_INLINE
-upb_decodestatus upb_decode(const char *buf, size_t size, upb_msg *msg,
+upb_DecodeStatus upb_decode(const char *buf, size_t size, upb_msg *msg,
                             const upb_msglayout *l, upb_arena *arena) {
   return _upb_decode(buf, size, msg, l, NULL, 0, arena);
 }
diff --git a/upb/decode_fast.c b/upb/decode_fast.c
index 5287bfd..65865b8 100644
--- a/upb/decode_fast.c
+++ b/upb/decode_fast.c
@@ -398,7 +398,7 @@
                                                                                \
   ptr += tagbytes;                                                             \
   ptr = fastdecode_varint64(ptr, &val);                                        \
-  if (ptr == NULL) return fastdecode_err(d, UPB_DECODE_MALFORMED);             \
+  if (ptr == NULL) return fastdecode_err(d, kUpb_DecodeStatus_Malformed);      \
   val = fastdecode_munge(val, valbytes, zigzag);                               \
   memcpy(dst, &val, valbytes);                                                 \
                                                                                \
@@ -462,7 +462,7 @@
   ptr = fastdecode_delimited(d, ptr, &fastdecode_topackedvarint, &ctx);        \
                                                                                \
   if (UPB_UNLIKELY(ptr == NULL)) {                                             \
-    return fastdecode_err(d, UPB_DECODE_MALFORMED);                            \
+    return fastdecode_err(d, kUpb_DecodeStatus_Malformed);                     \
   }                                                                            \
                                                                                \
   UPB_MUSTTAIL return fastdecode_dispatch(d, ptr, msg, table, hasbits, 0);
@@ -579,7 +579,7 @@
                                                                             \
   if (UPB_UNLIKELY(fastdecode_boundscheck(ptr, size, d->limit_ptr) ||       \
                    (size % valbytes) != 0)) {                               \
-    return fastdecode_err(d, UPB_DECODE_MALFORMED);                         \
+    return fastdecode_err(d, kUpb_DecodeStatus_Malformed);                  \
   }                                                                         \
                                                                             \
   upb_array **arr_p = fastdecode_fieldmem(msg, data);                       \
@@ -590,7 +590,7 @@
   if (UPB_LIKELY(!arr)) {                                                   \
     *arr_p = arr = _upb_array_new(&d->arena, elems, elem_size_lg2);         \
     if (!arr) {                                                             \
-      return fastdecode_err(d, UPB_DECODE_MALFORMED);                       \
+      return fastdecode_err(d, kUpb_DecodeStatus_Malformed);                \
     }                                                                       \
   } else {                                                                  \
     _upb_array_resize(arr, elems, &d->arena);                               \
@@ -656,7 +656,7 @@
                                          uint64_t hasbits, uint64_t data) {
   upb_strview *dst = (upb_strview*)data;
   if (!decode_verifyutf8_inl(dst->data, dst->size)) {
-    return fastdecode_err(d, UPB_DECODE_BAD_UTF8);
+    return fastdecode_err(d, kUpb_DecodeStatus_BadUtf8);
   }
   UPB_MUSTTAIL return fastdecode_dispatch(UPB_PARSE_ARGS);
 }
@@ -670,16 +670,16 @@
                                                                                \
   if (UPB_UNLIKELY(fastdecode_boundscheck(ptr, size, d->limit_ptr))) {         \
     dst->size = 0;                                                             \
-    return fastdecode_err(d, UPB_DECODE_MALFORMED);                            \
+    return fastdecode_err(d, kUpb_DecodeStatus_Malformed);                     \
   }                                                                            \
                                                                                \
-  if (d->options & UPB_DECODE_ALIAS) {                                         \
+  if (d->options & kUpb_DecodeOption_AliasString) {                            \
     dst->data = ptr;                                                           \
     dst->size = size;                                                          \
   } else {                                                                     \
     char *data = upb_arena_malloc(&d->arena, size);                            \
     if (!data) {                                                               \
-      return fastdecode_err(d, UPB_DECODE_OOM);                                \
+      return fastdecode_err(d, kUpb_DecodeStatus_OutOfMemory);                 \
     }                                                                          \
     memcpy(data, ptr, size);                                                   \
     dst->data = data;                                                          \
@@ -732,7 +732,7 @@
   size_t common_has;                                                           \
   char *buf;                                                                   \
                                                                                \
-  UPB_ASSERT((d->options & UPB_DECODE_ALIAS) == 0);                            \
+  UPB_ASSERT((d->options & kUpb_DecodeOption_AliasString) == 0);               \
   UPB_ASSERT(fastdecode_checktag(data, tagbytes));                             \
                                                                                \
   dst = fastdecode_getfield(d, ptr, msg, &data, &hasbits, &farr,               \
@@ -773,7 +773,7 @@
                                                                                \
   if (card == CARD_r) {                                                        \
     if (validate_utf8 && !decode_verifyutf8_inl(dst->data, dst->size)) {       \
-      return fastdecode_err(d, UPB_DECODE_BAD_UTF8);                           \
+      return fastdecode_err(d, kUpb_DecodeStatus_BadUtf8);                     \
     }                                                                          \
     fastdecode_nextret ret = fastdecode_nextrepeated(                          \
         d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_strview));             \
@@ -816,7 +816,7 @@
     RETURN_GENERIC("string field tag mismatch\n");                             \
   }                                                                            \
                                                                                \
-  if (UPB_UNLIKELY((d->options & UPB_DECODE_ALIAS) == 0)) {                    \
+  if (UPB_UNLIKELY((d->options & kUpb_DecodeOption_AliasString) == 0)) {       \
     UPB_MUSTTAIL return copyfunc(UPB_PARSE_ARGS);                              \
   }                                                                            \
                                                                                \
@@ -848,14 +848,14 @@
                                                                                \
   if (card == CARD_r) {                                                        \
     if (validate_utf8 && !decode_verifyutf8_inl(dst->data, dst->size)) {       \
-      return fastdecode_err(d, UPB_DECODE_BAD_UTF8);                           \
+      return fastdecode_err(d, kUpb_DecodeStatus_BadUtf8);                     \
     }                                                                          \
     fastdecode_nextret ret = fastdecode_nextrepeated(                          \
         d, dst, &ptr, &farr, data, tagbytes, sizeof(upb_strview));             \
     switch (ret.next) {                                                        \
       case FD_NEXT_SAMEFIELD:                                                  \
         dst = ret.dst;                                                         \
-        if (UPB_UNLIKELY((d->options & UPB_DECODE_ALIAS) == 0)) {              \
+        if (UPB_UNLIKELY((d->options & kUpb_DecodeOption_AliasString) == 0)) { \
           /* Buffer flipped and we can't alias any more. Bounce to */          \
           /* copyfunc(), but via dispatch since we need to reload table */     \
           /* data also. */                                                     \
@@ -961,7 +961,7 @@
   }                                                                       \
                                                                           \
   if (--d->depth == 0) {                                                  \
-    return fastdecode_err(d, UPB_DECODE_MAXDEPTH_EXCEEDED);               \
+    return fastdecode_err(d, kUpb_DecodeStatus_MaxDepthExceeded);         \
   }                                                                       \
                                                                           \
   upb_msg **dst;                                                          \
@@ -998,7 +998,7 @@
   ptr = fastdecode_delimited(d, ptr, fastdecode_tosubmsg, &submsg);       \
                                                                           \
   if (UPB_UNLIKELY(ptr == NULL || d->end_group != DECODE_NOGROUP)) {      \
-    return fastdecode_err(d, UPB_DECODE_MALFORMED);                       \
+    return fastdecode_err(d, kUpb_DecodeStatus_Malformed);                \
   }                                                                       \
                                                                           \
   if (card == CARD_r) {                                                   \
diff --git a/upb/decode_internal.h b/upb/decode_internal.h
index 2085ae4..13fb0a9 100644
--- a/upb/decode_internal.h
+++ b/upb/decode_internal.h
@@ -59,6 +59,11 @@
   char patch[32];
   upb_arena arena;
   jmp_buf err;
+
+#ifndef NDEBUG
+  const char *debug_tagstart;
+  const char *debug_valstart;
+#endif
 } upb_decstate;
 
 /* Error function that will abort decoding with longjmp(). We can't declare this
@@ -115,7 +120,7 @@
     if (d->unknown_msg) {
       if (!_upb_msg_addunknown(d->unknown_msg, d->unknown, ptr - d->unknown,
                                &d->arena)) {
-        *status = UPB_DECODE_OOM;
+        *status = kUpb_DecodeStatus_OutOfMemory;
         return NULL;
       }
       d->unknown = &d->patch[0] + overrun;
@@ -126,11 +131,11 @@
     d->end = &d->patch[16];
     d->limit -= 16;
     d->limit_ptr = d->end + d->limit;
-    d->options &= ~UPB_DECODE_ALIAS;
+    d->options &= ~kUpb_DecodeOption_AliasString;
     UPB_ASSERT(ptr < d->limit_ptr);
     return ptr;
   } else {
-    *status = UPB_DECODE_MALFORMED;
+    *status = kUpb_DecodeStatus_Malformed;
     return NULL;
   }
 }
diff --git a/upb/def.c b/upb/def.c
index b9f5dd7..a574720 100644
--- a/upb/def.c
+++ b/upb/def.c
@@ -1592,6 +1592,7 @@
   l->fields = fields;
   l->subs = subs;
   l->table_mask = 0;
+  l->required_count = 0;
 
   if (upb_msgdef_extrangecount(m) > 0) {
     if (google_protobuf_MessageOptions_message_set_wire_format(m->opts)) {
@@ -1654,6 +1655,19 @@
   /* Assign hasbits for required fields first. */
   size_t hasbit = 0;
 
+  for (int i = 0; i < m->field_count; i++) {
+    const upb_fielddef* f = &m->fields[i];
+    upb_msglayout_field *field = &fields[upb_fielddef_index(f)];
+    if (upb_fielddef_label(f) == UPB_LABEL_REQUIRED) {
+      field->presence = ++hasbit;
+      if (hasbit >= 63) {
+        symtab_errf(ctx, "Message with >=63 required fields: %s",
+                    upb_msgdef_fullname(m));
+      }
+      l->required_count++;
+    }
+  }
+
   /* Allocate hasbits and set basic field attributes. */
   sublayout_count = 0;
   for (int i = 0; i < m->field_count; i++) {
@@ -2998,7 +3012,7 @@
   }
 
   file = google_protobuf_FileDescriptorProto_parse_ex(
-      init->descriptor.data, init->descriptor.size, NULL, UPB_DECODE_ALIAS,
+      init->descriptor.data, init->descriptor.size, NULL, kUpb_DecodeOption_AliasString,
       arena);
   s->bytes_loaded += init->descriptor.size;
 
diff --git a/upb/table.c b/upb/table.c
index 63fecf2..a3b33ae 100644
--- a/upb/table.c
+++ b/upb/table.c
@@ -812,7 +812,7 @@
     while (++i < t->array_size) {
       upb_tabval ent = t->array[i];
       if (upb_arrhas(ent)) {
-        *key = i; 
+        *key = i;
         *val = _upb_value_val(ent.val);
         *iter = i;
         return true;
diff --git a/upbc/protoc-gen-upb.cc b/upbc/protoc-gen-upb.cc
index 446ea1c..fa6b1c5 100644
--- a/upbc/protoc-gen-upb.cc
+++ b/upbc/protoc-gen-upb.cc
@@ -83,6 +83,12 @@
   }
 }
 
+template <class T>
+void SortDefs(std::vector<T>* defs) {
+  std::sort(defs->begin(), defs->end(),
+            [](T a, T b) { return a->full_name() < b->full_name(); });
+}
+
 std::vector<const protobuf::EnumDescriptor*> SortedEnums(
     const protobuf::FileDescriptor* file) {
   std::vector<const protobuf::EnumDescriptor*> enums;
@@ -92,6 +98,7 @@
   for (int i = 0; i < file->message_type_count(); i++) {
     AddEnums(file->message_type(i), &enums);
   }
+  SortDefs(&enums);
   return enums;
 }
 
@@ -1354,7 +1361,8 @@
   output("    &$0,\n", MessageInit(ext->containing_type()));
   if (ext->message_type()) {
     output("    {.submsg = &$0},\n", MessageInit(ext->message_type()));
-  } else if (ext->enum_type() && ext->enum_type()->file()->syntax() == protobuf::FileDescriptor::SYNTAX_PROTO2) {
+  } else if (ext->enum_type() && ext->enum_type()->file()->syntax() ==
+                                     protobuf::FileDescriptor::SYNTAX_PROTO2) {
     output("    {.subenum = &$0},\n", EnumInit(ext->enum_type()));
   } else {
     output("    {.submsg = NULL},\n");
