)]}'
{
  "commit": "5769253eff21418f3fa4aae1c3fe74aae9669471",
  "tree": "efa905f8c5ddb38eaa49595942708b1945fb2730",
  "parents": [
    "d99b5ba1b633c8e2d05ee9b22ace14a37bc9626f"
  ],
  "author": {
    "name": "Protobuf Team Bot",
    "email": "protobuf-github-bot@google.com",
    "time": "Wed Nov 04 03:17:46 2026 -0800"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Wed Nov 04 04:07:54 2026 -0800"
  },
  "message": "Shrink `TcParseTableBase` from 56 bytes to 32 bytes by removing its three 8-byte pointer members (`class_data`, `post_loop_handler`, and `fallback`):\n\n1. **`class_data` (`-8 B`, `-1` relocation/msg)**: Every generated `\u003cMsg\u003e_globals_` struct embeds `TcParseTableBase` at a deterministic offset stored in `ClassData::default_instance()[1]` (`OffsetToParseTable()`), and reflection-created tables store `default_instance()` in `aux_entries[0]` (`kSelfVerifyFunc`). Compute `ClassData` and `default_instance` directly without storing a redundant pointer in `TcParseTableBase`.\n2. **`post_loop_handler` (`-8 B`, `-1` relocation/msg)**: `post_loop_handler` is null on ~94.5-98.1% of messages and is already gated by `has_post_loop_handler`. Pack `has_post_loop_handler : 2` (`0` \u003d none, `1` \u003d `TcParser::VerifyHasbits`, `2` \u003d `TcParser::ReflectionPostLoopHandler`, `3` \u003d custom handler stored in `aux_entries[1]` via `kPostLoopHandler`).\n3. **`fallback` (`-8 B`, `-1` relocation/msg)**: Store a 5-bit `fallback_idx` (`TcParseFunction` enum) in `TcParseTableBase` and index a `constexpr` function pointer table in `TcParseTableBase::fallback()`.\n\nNote on `TcParseTable` pure-integer tail arrays (`field_lookup_table`, `field_entries`, `field_names`): these are kept inside `TcParseTable` rather than moved to a separate `.rodata` symbol because C++ `constexpr` evaluation cannot initialize a 32-bit offset member with a cross-section pointer difference (`\u0026rodata_tail - \u0026header`), and replacing the offset with a pointer would add `+8 B` and `+1` dynamic relocation per message in `.data.rel.ro`/`pb_defaults`.\n\nPiperOrigin-RevId: 1013709112\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "83681d6344f844e43ad769166715e0288f6e1762",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/compiler/cpp/parse_function_generator.cc",
      "new_id": "51883c205eebce8f187a9741c2a0056c8b4d45e0",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/compiler/cpp/parse_function_generator.cc"
    },
    {
      "type": "modify",
      "old_id": "6a4724649f8925c4026d6691ff36d8f8d2e7006d",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/generated_message_reflection.cc",
      "new_id": "66dd046b426bd8addea0493ef7fdbddc89b3d735",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/generated_message_reflection.cc"
    },
    {
      "type": "modify",
      "old_id": "be78c7a67ae00f0f3c3d5cecb63cab08545a300e",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/generated_message_tctable_decl.h",
      "new_id": "e2807d19b2e783d9a03ec84da993bd986e379024",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/generated_message_tctable_decl.h"
    },
    {
      "type": "modify",
      "old_id": "fd1e0e6f5f25576389785aca71a74457d9d16ab8",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/generated_message_tctable_gen.h",
      "new_id": "ddad5da377be50da0777ca83d297fed758b90a19",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/generated_message_tctable_gen.h"
    },
    {
      "type": "modify",
      "old_id": "17ddda6ab432e66b129b7933dc454cc095cbaafb",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/generated_message_tctable_impl.h",
      "new_id": "bd9ea4cf0ea4eba45b85142ef15060a90fdea666",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/generated_message_tctable_impl.h"
    },
    {
      "type": "modify",
      "old_id": "ae9528f88eac33ada51f0a42dd5322c76901b6ce",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/generated_message_tctable_lite.cc",
      "new_id": "4d3de05d32f51a7e03a4498d269d9466b4b377a2",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/generated_message_tctable_lite.cc"
    },
    {
      "type": "modify",
      "old_id": "41c642359d4ab9c478f76345f62e54579890b393",
      "old_mode": 33188,
      "old_path": "src/google/protobuf/message.cc",
      "new_id": "666f439d8ec2f27b9043b35700bf1ddff7e08c3a",
      "new_mode": 33188,
      "new_path": "src/google/protobuf/message.cc"
    }
  ]
}
