@@ -383,6 +383,13 @@ PROTOBUF_NOINLINE const char* TcParser::FastEndG2(PROTOBUF_TC_PARAM_DECL) {
383
383
template <typename TagType, bool group_coding, bool aux_is_table>
384
384
inline PROTOBUF_ALWAYS_INLINE const char * TcParser::SingularParseMessageAuxImpl (
385
385
PROTOBUF_TC_PARAM_DECL) {
386
+ /*
387
+ const uint32_t decoded_tag = data.tag();
388
+ const uint32_t decoded_wiretype = decoded_tag & 7;
389
+ if (decoded_wiretype == WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
390
+ PROTOBUF_MUSTTAIL return MpPackedFixed(PROTOBUF_TC_PARAM_PASS);
391
+ }*/
392
+
386
393
if (PROTOBUF_PREDICT_FALSE (data.coded_tag <TagType>() != 0 )) {
387
394
PROTOBUF_MUSTTAIL return MiniParse (PROTOBUF_TC_PARAM_NO_DATA_PASS);
388
395
}
@@ -2326,44 +2333,37 @@ PROTOBUF_NOINLINE const char* TcParser::MpMessage(PROTOBUF_TC_PARAM_DECL) {
2326
2333
const uint16_t type_card = entry.type_card ;
2327
2334
const uint16_t card = type_card & field_layout::kFcMask ;
2328
2335
2336
+ const uint32_t decoded_tag = data.tag ();
2337
+ const uint32_t decoded_wiretype = decoded_tag & 7 ;
2338
+
2329
2339
// Check for repeated parsing:
2330
2340
if (card == field_layout::kFcRepeated ) {
2331
- const uint16_t rep = type_card & field_layout::kRepMask ;
2332
- switch (rep) {
2333
- case field_layout::kRepMessage :
2341
+ switch (decoded_wiretype) {
2342
+ case WireFormatLite::WIRETYPE_LENGTH_DELIMITED:
2334
2343
PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, false >(
2335
2344
PROTOBUF_TC_PARAM_PASS);
2336
- case field_layout:: kRepGroup :
2345
+ case WireFormatLite::WIRETYPE_START_GROUP :
2337
2346
PROTOBUF_MUSTTAIL return MpRepeatedMessageOrGroup<is_split, true >(
2338
2347
PROTOBUF_TC_PARAM_PASS);
2339
2348
default :
2340
2349
PROTOBUF_MUSTTAIL return table->fallback (PROTOBUF_TC_PARAM_PASS);
2341
2350
}
2342
2351
}
2343
-
2344
- const uint32_t decoded_tag = data.tag ();
2345
- const uint32_t decoded_wiretype = decoded_tag & 7 ;
2346
2352
const uint16_t rep = type_card & field_layout::kRepMask ;
2347
- const bool is_group = rep == field_layout::kRepGroup ;
2348
-
2349
- // Validate wiretype:
2350
- switch (rep) {
2351
- case field_layout::kRepMessage :
2352
- if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
2353
- goto fallback;
2354
- }
2355
- break ;
2356
- case field_layout::kRepGroup :
2357
- if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
2358
- goto fallback;
2359
- }
2360
- break ;
2361
- default : {
2362
- fallback:
2363
- PROTOBUF_MUSTTAIL return table->fallback (PROTOBUF_TC_PARAM_PASS);
2364
- }
2353
+ // note that we solely rely on wiretype for parsing messages (schema ignored)
2354
+ const bool is_group =
2355
+ decoded_wiretype == WireFormatLite::WIRETYPE_START_GROUP;
2356
+ // handle the aberrant case where we just have a sole EGROUP
2357
+ if (decoded_wiretype == WireFormatLite::WIRETYPE_END_GROUP) {
2358
+ PROTOBUF_MUSTTAIL return table->fallback (PROTOBUF_TC_PARAM_PASS);
2365
2359
}
2366
2360
2361
+ // only validate schema for lazy fields
2362
+
2363
+ // remark: initially tried invoking FastGdS1 upon seeing wiretype_group but
2364
+ // got unit test failures
2365
+ // PROTOBUF_MUSTTAIL return FastGdS1(PROTOBUF_TC_PARAM_PASS);
2366
+
2367
2367
const bool is_oneof = card == field_layout::kFcOneof ;
2368
2368
bool need_init = false ;
2369
2369
if (card == field_layout::kFcOptional ) {
@@ -2415,14 +2415,10 @@ const char* TcParser::MpRepeatedMessageOrGroup(PROTOBUF_TC_PARAM_DECL) {
2415
2415
2416
2416
// Validate wiretype:
2417
2417
if (!is_group) {
2418
- ABSL_DCHECK_EQ (type_card & field_layout::kRepMask ,
2419
- static_cast <uint16_t >(field_layout::kRepMessage ));
2420
2418
if (decoded_wiretype != WireFormatLite::WIRETYPE_LENGTH_DELIMITED) {
2421
2419
PROTOBUF_MUSTTAIL return table->fallback (PROTOBUF_TC_PARAM_PASS);
2422
2420
}
2423
2421
} else {
2424
- ABSL_DCHECK_EQ (type_card & field_layout::kRepMask ,
2425
- static_cast <uint16_t >(field_layout::kRepGroup ));
2426
2422
if (decoded_wiretype != WireFormatLite::WIRETYPE_START_GROUP) {
2427
2423
PROTOBUF_MUSTTAIL return table->fallback (PROTOBUF_TC_PARAM_PASS);
2428
2424
}
0 commit comments