)]}'
{
  "commit": "e243b0c66abf31785491700fe2b1a8ca55597b4a",
  "tree": "18047d25a3856176316d2c1fea741e314fe7935c",
  "parents": [
    "799d256d348286278fc60c8fd94352175b05bff5"
  ],
  "author": {
    "name": "Protobuf Team Bot",
    "email": "protobuf-github-bot@google.com",
    "time": "Tue Nov 03 13:42:50 2026 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Nov 03 14:24:55 2026 -0800"
  },
  "message": "Split InternalVerify submessage verification tables into separate tag and function-pointer arrays.\n\nPreviously, MessageGenerator::GenerateVerify emitted a single static constexpr array of LazyEagerVerifyFnTable structs, each pairing a 32-bit wire tag (plus 4 bytes of alignment padding) with a 64-bit LazyEagerVerifyFnType function pointer. Mixing integers and function pointers in the same array forced the entire table (including the tags and padding) into .data.rel.ro in PIE builds.\n\nEmit separate static constexpr kVerifyTags (uint32_t[], placed in .rodata) and kVerifyFuncs (LazyEagerVerifyFnType[], placed in .data.rel.ro) arrays:\n- Eliminates 4 bytes of struct alignment padding per entry and moves the 4-byte tag out of .data.rel.ro into .rodata (reducing .data.rel.ro footprint for verification tables by 50% and net binary size by 25% of table size).\n- LookupVerifyFunc scans only the compact 4-byte kVerifyTags array in .rodata and indexes into kVerifyFuncs only on a tag match, avoiding .data.rel.ro cache-line loads when skipping string/bytes fields.\n- Unpacks VerifyLengthDelimitedSubMessage into register-passed arguments in WireFormatVerify so vops_length_delimited is not materialized in .data.rel.ro and InternalVerify remains a tail call.\n- Specializes VerifyLengthDelimitedExtension\u003cfalse\u003e to omit unused submessage table fields (shrinking it from 40 to 24 bytes in .data.rel.ro) and packs range/tag counts in VerifyLengthDelimitedExtension\u003ctrue\u003e to keep it at 40 bytes.\n- Skips emitting unused static table arrays for single-entry non-extension messages using VerifyLengthDelimitedOneTag.\n\nPiperOrigin-RevId: 1013262465\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "19dfaac9e226f62186fffdab5e35397d8eb3a283",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/compiler/cpp/message.cc",
      "new_id": "ca2adf38c6a3903ebc2049b159ac29e2bc38f8a8",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/compiler/cpp/message.cc"
    }
  ]
}
