mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
Disable fasttable when executing 32bit decoder on 64bit cpu.
PiperOrigin-RevId: 955047292
This commit is contained in:
parent
1e4949d09b
commit
efa7be94db
2 changed files with 24 additions and 2 deletions
|
|
@ -824,8 +824,11 @@ done:
|
|||
|
||||
#if UPB_FASTTABLE
|
||||
upb_DecodeFast_TableEntry fasttable[32];
|
||||
int fasttable_size = upb_DecodeFast_BuildTable(&decoder->table, fasttable);
|
||||
mt_size += fasttable_size * sizeof(fasttable[0]);
|
||||
int fasttable_size = 0;
|
||||
if (decoder->platform == kUpb_MiniTablePlatform_64Bit) {
|
||||
fasttable_size = upb_DecodeFast_BuildTable(&decoder->table, fasttable);
|
||||
mt_size += fasttable_size * sizeof(fasttable[0]);
|
||||
}
|
||||
#endif
|
||||
|
||||
upb_MiniTable* ret = upb_Arena_Malloc(decoder->arena, mt_size);
|
||||
|
|
|
|||
|
|
@ -339,3 +339,22 @@ TEST_P(MiniTableTest, Extendible) {
|
|||
EXPECT_EQ(kUpb_ExtMode_Extendable,
|
||||
table->UPB_PRIVATE(ext) & kUpb_ExtMode_Extendable);
|
||||
}
|
||||
|
||||
TEST(MiniTableTest, Build32BitMiniTableWithSubmessagesNoFastTableAssert) {
|
||||
upb::Arena arena;
|
||||
upb::MtDataEncoder e;
|
||||
|
||||
ASSERT_TRUE(e.StartMessage(0));
|
||||
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 1, 0));
|
||||
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 2, 0));
|
||||
ASSERT_TRUE(e.PutField(kUpb_FieldType_Message, 3, 0));
|
||||
|
||||
upb::Status status;
|
||||
upb_MiniTable* table = _upb_MiniTable_Build(e.data().data(), e.data().size(),
|
||||
kUpb_MiniTablePlatform_32Bit,
|
||||
arena.ptr(), status.ptr());
|
||||
|
||||
ASSERT_NE(nullptr, table) << status.error_message();
|
||||
EXPECT_EQ(3, upb_MiniTable_FieldCount(table));
|
||||
EXPECT_EQ(0xff, table->UPB_PRIVATE(table_mask));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue