)]}'
{
  "log": [
    {
      "commit": "b1dff2231ccbd04e3a92e42fb3458231965ca5d1",
      "tree": "72fbf36051dedf2796f6400a0c77f56d3e072248",
      "parents": [
        "c68058ac05b80d298933fe2a94bde64842bd5e0c"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Fri Oct 23 02:52:03 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 23 02:53:04 2026 -0700"
      },
      "message": "Move out of the line StrCat numeric formatting helpers to reduce binary size.\n\nHeader-inlined numeric formatting helpers in `str_cat.h` expand repeatedly across call sites and translation units, inflating binary text and unwind tables for single-argument and floating-point string conversions.\n\nPiperOrigin-RevId: 1005442834\n"
    },
    {
      "commit": "c68058ac05b80d298933fe2a94bde64842bd5e0c",
      "tree": "c5ec1dd714c72a51b3ec849d22a7e4fdfde0cacc",
      "parents": [
        "5afc22695bd4503590ff1fdc3a689921f438ff1f"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Thu Oct 22 15:40:22 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 15:41:11 2026 -0700"
      },
      "message": "Use reclient for Alpine Linux CMake builds and unify Linux CMake CI config.\n\nUpdates the Alpine Linux container image to include reclient and rbe_test_launcher, allowing all Linux CMake jobs to run compilation and tests remotely on RBE instead of conditionalizing on oss-linux images.\n\nPiperOrigin-RevId: 1005106568\n"
    },
    {
      "commit": "5afc22695bd4503590ff1fdc3a689921f438ff1f",
      "tree": "456988daaa538554a321842a08b233e9232f07e4",
      "parents": [
        "5d5baae39a59b8401b92c0a6790cc13d0889d295"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Thu Oct 22 15:14:59 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 15:15:38 2026 -0700"
      },
      "message": "Use reclient for remote CMake compilation and test execution on Linux.\n\nThis switches Linux CMake CI builds from sccache to reclient (reproxy and rewrapper) backed by our RBE cluster, offloading both C/C++ compilation (via CMAKE_C_COMPILER_LAUNCHER and CMAKE_CXX_COMPILER_LAUNCHER) and CTest execution (via CMAKE_TEST_LAUNCHER) across 50 parallel RBE workers. Also updates CMake/install_test_project/test.sh to place its build directories inside the workspace so they fall under RBE_exec_root.\n\nPiperOrigin-RevId: 1005089593\n"
    },
    {
      "commit": "5d5baae39a59b8401b92c0a6790cc13d0889d295",
      "tree": "d363db39be336eb06fbe238abee5594ad6783339",
      "parents": [
        "0abf9f718689ef78c28cd67971c1bb2e8ef0ca02"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Thu Oct 22 13:45:57 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 13:46:47 2026 -0700"
      },
      "message": "Implement `raw_hash_set::count()` in terms of `contains()`.\n\nThis improves generated code only in non-opt mode (debug and hardened builds) by avoiding iterator comparison assertions and stack spills, saving ~40 bytes per call site. In optimized mode (`-c opt`), this is neutral as `find(key) \u003d\u003d end()` and `contains(key)` compile to identical assembly.\n\nPiperOrigin-RevId: 1005026091\n"
    },
    {
      "commit": "0abf9f718689ef78c28cd67971c1bb2e8ef0ca02",
      "tree": "d078a38470093f09b14e96c9c06283efad39e640",
      "parents": [
        "87c0dc9fd8119b651b4be74c7fd86394def9237b"
      ],
      "author": {
        "name": "Connal de Souza",
        "email": "connaldesouza@google.com",
        "time": "Thu Oct 22 12:50:07 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 12:51:10 2026 -0700"
      },
      "message": "Reduce multi-stream block size from 64 bytes to 16 bytes in ExtendWithPclmul.\n\nChange the per-stream block granularity in `ExtendWithPclmul` from 64 bytes to\n16 bytes when `copy_type \u003d\u003d CopyType::kNone` so that fewer trailing bytes fall\nthrough to the slow single-stream scalar loop.\n\nAfter the 64-byte main loop (`bs / 4` iterations), handle the remaining 32-byte\n(`bs \u0026 2`) and 16-byte (`bs \u0026 1`) per-stream blocks in non-copy mode using\n`ProcessAllStreams16`, rotating the 4 partial CRCs per PCLMUL stream so they\nremain ordered from oldest to newest before final reduction.\n\nRe-tune the stream counts, since it\u0027s now less expensive to have a larger number of them.\n\nAlso, move the computation of the magic constant to before the main loop, so that it\u0027s latency is off the critical path.\n\nPiperOrigin-RevId: 1004984384\n"
    },
    {
      "commit": "87c0dc9fd8119b651b4be74c7fd86394def9237b",
      "tree": "7553c2f45c58fb7c7120050078a4e5d690b2b862",
      "parents": [
        "60f173160384d96c690ecd29728105ad95ee665c"
      ],
      "author": {
        "name": "Chris Kennelly",
        "email": "ckennelly@google.com",
        "time": "Thu Oct 22 12:46:57 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 12:47:51 2026 -0700"
      },
      "message": "Add RegisterSpinLockLockProfiler, reporting each acquirer\u0027s wait.\n\nSince 2022, Mutex has reported both the acquiring thread\u0027s callstack and time to acquisition and the releasing thread\u0027s callstack when contended.  SpinLock retained the prior behavior and its contention reports all go into unlocking delays.\n\nThis adds the equivalent hook for SpinLock.\n\nPiperOrigin-RevId: 1004982160\n"
    },
    {
      "commit": "60f173160384d96c690ecd29728105ad95ee665c",
      "tree": "a3152517ccbaee7014acdb9a88bd9589fa208556",
      "parents": [
        "151cf166585e51c8aa7e17ed032d10ea39ec9145"
      ],
      "author": {
        "name": "Evan Brown",
        "email": "ezb@google.com",
        "time": "Thu Oct 22 11:39:32 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 11:40:24 2026 -0700"
      },
      "message": "Mask HashtableInlineData fields from data_ rather than reading bytes and use a 5-bit seed.\n\nReading `capacity` and `seed` through byte loads (`read_byte`) on x86 causes store-to-load forwarding stalls (aka read-after-write (RAW) hazard) after 64-bit stores to `data_` (such as `increment_size()`, etc) and prevents the compiler from sharing a single 64-bit load of `data_` across `is_small()`, `capacity()`, `seed()`, and `empty()` (or folding `is_small() \u0026\u0026 empty()` into a single `testq` in destructors).\n\nNote: the latency of find() increases by one cycle (on e.g. znver3) due to the loss of movzbl so this is a tradeoff of removing RAW hazard and smaller code size in exchange for slower find().\n\nRemove `read_byte` and extract both `capacity()` and `seed()` by masking the 64-bit `data_` word (`data_ \u0026 kCapacityMask` and `data_ \u0026 kSeedMask`), setting `kSeedShift \u003d kIsAbslHash ? 0 : HashtableInlineData::kSeedShift` so that `absl::Hash` consumes the pre-shifted `data_ \u0026 kSeedMask` value directly without a right shift. Because `seed()` is now masked rather than byte-loaded, shrink `kSeedBitCount` from 8 back to 5 while keeping the seed within the second byte of `data_` (so `gbswap_64` on `data_ \u0026 kSeedMask` in `absl::Hash` still simplifies to a single shift), returning the 3 extra bits to `size` (40 bits instead of 37).\n\nPiperOrigin-RevId: 1004932112\n"
    },
    {
      "commit": "151cf166585e51c8aa7e17ed032d10ea39ec9145",
      "tree": "e411423fa64803fb86f8cbe2a9472f83b969548e",
      "parents": [
        "58a8391bbec96440604189ebb73359623dafe925"
      ],
      "author": {
        "name": "Evan Brown",
        "email": "ezb@google.com",
        "time": "Thu Oct 22 09:52:53 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 09:53:30 2026 -0700"
      },
      "message": "Don\u0027t reuse backing array in clear(), except for capacity 1 tables.\n\nThe motivation is to save memory.\n\nPiperOrigin-RevId: 1004850661\n"
    },
    {
      "commit": "58a8391bbec96440604189ebb73359623dafe925",
      "tree": "67b6d7acfc2fd127866ac1f3a3ea49c5d359ab0e",
      "parents": [
        "4c83f5410bfe8f5c088ee24b462baeef5e8f0436"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Thu Oct 22 09:43:09 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 09:45:11 2026 -0700"
      },
      "message": "Avoid splitting remote cache in two for scheduled tests\n\nPiperOrigin-RevId: 1004843936\n"
    },
    {
      "commit": "4c83f5410bfe8f5c088ee24b462baeef5e8f0436",
      "tree": "3688c59dbbcd22543449867b36b6aa4fdbaadfc8",
      "parents": [
        "bcb0e5a0c7f8460102873af962108b988c698790"
      ],
      "author": {
        "name": "Derek Mauro",
        "email": "dmauro@google.com",
        "time": "Thu Oct 22 09:25:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 09:26:48 2026 -0700"
      },
      "message": "Add absl::MockClock, a gMock implementation of absl::Clock for writing tests\n\nPiperOrigin-RevId: 1004832177\n"
    },
    {
      "commit": "bcb0e5a0c7f8460102873af962108b988c698790",
      "tree": "c9eea3863fcd0adf1746dc27b4e07551f8c708a8",
      "parents": [
        "e92c357f19dfd9c2390d388aaa98e72adb2abac0"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Thu Oct 22 04:27:47 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 22 04:28:25 2026 -0700"
      },
      "message": "Move out of the line ASCII and OStringStream helpers to reduce binary size.\n\nHeader-inlined case conversion and whitespace stripping functions in `ascii.h` as well as `OStringStream` lifecycle methods in `ostringstream.h` expand repeatedly across call sites and translation units, inflating binary text and increasing compilation time.\n\nPiperOrigin-RevId: 1004670113\n"
    },
    {
      "commit": "e92c357f19dfd9c2390d388aaa98e72adb2abac0",
      "tree": "c5387ff8aaaa480ccb158623592244d091aa7749",
      "parents": [
        "e1beb13923ede3a4b6bd2ec31fd7c6f1d1eb591b"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 21 12:27:19 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 12:28:28 2026 -0700"
      },
      "message": "Fix comment typos and formatting in str_split.h\n\nFixes a mismatched quote around `std::map` and adds missing whitespace after a comma in the container list.\n\nThis fixes tooltip formatting.\n\nPiperOrigin-RevId: 1004142437\n"
    },
    {
      "commit": "e1beb13923ede3a4b6bd2ec31fd7c6f1d1eb591b",
      "tree": "a760475e8e7e72c3a2b37eb68963ed72d6ba1e17",
      "parents": [
        "980bfe77e13ca4746415d51f639ccb76622c8842"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 12:23:43 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 12:24:48 2026 -0700"
      },
      "message": "Share the slot transfer code between the cold paths that move elements to new positions in raw_hash_set.cc to reduce binary size.\n\n`DecodeAndInsertImpl` (three instantiations, one per probed item encoding), `ProcessProbedMarkedElements`, and `FindNewPositionsAndTransferSlots` all did the same thing for each element: find the first non-full slot in the probe sequence, set its control byte, unpoison it, and transfer the slot into it. Only the way the hash is obtained differed (decoded from the probed item vs. recomputed from the slot).\n\nExtract this into a single out-of-line `TransferSlotToNewPosition` that takes `h1` and `h2` and call it from all three loops. The control bytes are passed explicitly so that the function can also be used while `CommonFields` still stores the SOO data in place of the control pointer. All callers are cold (growth of the probed elements that did not fit into a group, rehash, and reserve).\n\nThe type-erased code in `raw_hash_set.cc` shrinks by 762 bytes (-3.8%) in optimized builds.\n\nPiperOrigin-RevId: 1004139833\n"
    },
    {
      "commit": "980bfe77e13ca4746415d51f639ccb76622c8842",
      "tree": "968c1597362854d9286a771cb62a40e486a26256",
      "parents": [
        "1d9b42fd5fcbae726bcf1fc9d6e9b2b543d5d6aa"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 11:50:53 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 11:51:32 2026 -0700"
      },
      "message": "Share the type-erased resize implementation between full SOO tables and allocated tables to reduce binary size.\n\n`ResizeFullSooTable` (with `InsertOldSooSlotAndInitializeControlBytes`) and `ResizeAllocatedTableWithSeedChange` (with `FindNewPositionsAndTransferSlots`) performed the same sequence of operations: allocate a new backing array, generate a new seed, reset the control bytes, transfer the elements to their new positions, release the old storage, reset the growth left, and report the resize to hashtablez. The only differences were where the old elements live (the SOO slot inside `CommonFields` vs. the old backing array) and how the infoz is obtained (forced sampling vs. kept from the allocated table).\n\nMerge them into a single out-of-line `ResizeTableWithSeedChangeImpl` that handles both cases. `FindNewPositionsAndTransferSlots` now receives the new control bytes and slots explicitly instead of reading them from `CommonFields`, so the control pointer is stored only after the transfer and the SOO slot is not overwritten. All of these paths are cold (reserving or rehashing a non-empty table, or forcing a sample of a full SOO table), so sharing the code does not affect hot paths. `ReserveAllocatedTable` and `Rehash` no longer need to dispatch between the SOO and the allocated case.\n\nThe type-erased code in `raw_hash_set.cc` shrinks by 1,047 bytes (-5.0%) in optimized builds.\n\nIt is also good simplification.\n\nPiperOrigin-RevId: 1004114129\n"
    },
    {
      "commit": "1d9b42fd5fcbae726bcf1fc9d6e9b2b543d5d6aa",
      "tree": "4cdea10ebb91b07a91056942b5934430b3caa098",
      "parents": [
        "001659f1e3ce0712df6cd773af3a0af816510ddf"
      ],
      "author": {
        "name": "Derek Mauro",
        "email": "dmauro@google.com",
        "time": "Wed Oct 21 05:56:35 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 05:57:50 2026 -0700"
      },
      "message": "Import of CCTZ from GitHub.\n\nPiperOrigin-RevId: 1003875522\n"
    },
    {
      "commit": "001659f1e3ce0712df6cd773af3a0af816510ddf",
      "tree": "cd53e946e49d0583fa153157b7d28729de708871",
      "parents": [
        "7a55cd2f657d4a2f233cef74eadf73a24a200cdb"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 02:47:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 02:48:03 2026 -0700"
      },
      "message": "Store hasher and allocator offsets in PolicyFunctions instead of accessor function pointers.\n\n`PolicyFunctions` carried two per-instantiation accessor functions, `hash_fn` and `get_char_alloc`, whose only job was to compute the address of the hasher and of the allocator from a `CommonFields\u0026`. Every type-erased growth, rehash, and copy path paid an indirect call for what is a compile-time constant offset, the calls acted as optimization barriers (values had to be moved into callee-saved registers or spilled around them).\n\nReplace the two function pointers with 32 bit offsets computed with `offsetof`.\n\n`sizeof(PolicyFunctions)` shrinks from 72 to 64 bytes (one cache line), `GetRefForEmptyClass` and the per-instantiation accessor functions disappear, and the type-erased code in `raw_hash_set.cc` shrinks by 95 bytes (-0.45%) in optimized builds.\n\nPiperOrigin-RevId: 1003783299\n"
    },
    {
      "commit": "7a55cd2f657d4a2f233cef74eadf73a24a200cdb",
      "tree": "4d1e3a521dc7fc083cc7ca0d673631c1dda5b943",
      "parents": [
        "f55358c60f517763307c09ae57c3eadb6d23985e"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 02:09:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 02:09:58 2026 -0700"
      },
      "message": "Move second-chance lookup in TryFindNewIndexWithoutProbing into type-erased encode_probed_element to reduce binary size.\n\nPreviously, `TryFindNewIndexWithoutProbing` (inlined into every template instantiation of `raw_hash_set\u003c...\u003e::transfer_unprobed_elements_to_next_capacity_fn`) contained both the unprobed element fast path and a second-chance SIMD group lookup for elements that were probed in the old table. Because `transfer_unprobed_elements_to_next_capacity_fn` is instantiated per container policy, this second-chance SIMD lookup was duplicated across every hash table instantiation.\n\nMove the second-chance lookup into `ProbedItemEncoder::EncodeProbedElement` (invoked from the type-erased `encode_probed_element` callback):\n- Simplify `TryFindNewIndexWithoutProbing`.\n\nPiperOrigin-RevId: 1003765009\n"
    },
    {
      "commit": "f55358c60f517763307c09ae57c3eadb6d23985e",
      "tree": "9ee7495a08daf31358f816ef41c1616a17a82d23",
      "parents": [
        "b766b4984be258e7d550d323a5c73721529b741c"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 02:00:39 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 02:01:28 2026 -0700"
      },
      "message": "Deduplicate backing array allocation in PrepareInsertSmallNonSoo to reduce binary size.\n\nIn `PrepareInsertSmallNonSoo`, growing from capacity 0 to 1 and growing from capacity 1 to 3 via `Grow1To3AndPrepareInsert` previously maintained two separate inlined copies of `policy.get_char_alloc`, `RawHashSetLayout`, and `AllocBackingArray`. Naively sharing the general `RawHashSetLayout` constructor between both paths introduces dynamic branching for `MetadataBeforeControlSize` and `NumControlBytes`, as well as extra `PHI` nodes across `policy.get_char_alloc` that spill registers to the stack.\n\nIntroduce `RawHashSetLayout::CreateForSmallNonSooGrowth` and an `AllocBackingArray` overload accepting `const RawHashSetLayout\u0026` so both small non-SOO growth paths share a single allocation sequence in `PrepareInsertSmallNonSoo`. Parameterizing the layout by `size \u003d common.size()` (`0` for 0 → 1, `1` for 1 → 3) computes `num_control_bytes \u003d size * NumControlBytes(3)` and `new_capacity \u003d NextCapacity(size)` directly from `size`, and computes `metadata_size` branchlessly without `GrowthInfoSizeForCapacity` (which is 0 for capacities 1 and 3). Because `Grow1To3AndPrepareInsert`, `AllocBackingArray`, and `RawHashSetLayout::CreateForSmallNonSooGrowth` are all inlined into `PrepareInsertSmallNonSoo`, this reduces the total compiled size of `PrepareInsertSmallNonSoo` (including all functions inlined into it) from 781 B to 716 B (-65 B / -8.3%) and shrinks its stack frame by 16 bytes.\n\nPiperOrigin-RevId: 1003760138\n"
    },
    {
      "commit": "b766b4984be258e7d550d323a5c73721529b741c",
      "tree": "965a796afeb7caee7204c96c48f2bd3641888a27",
      "parents": [
        "3a6b3207c1872407a32710e19f5ea065d3b8bb65"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 01:48:40 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 01:49:27 2026 -0700"
      },
      "message": "Reorder operations in Grow1To3AndPrepareInsert and GrowSooTableToNextCapacityAndPrepareInsert to reduce binary size.\n\n- In GrowSooTableToNextCapacityAndPrepareInsert, generate the new seed and compute new_hash and soo_slot_h2 before AllocBackingArray so that hasher, get_hash, and new_ctrl/new_slots do not need to be spilled across calls, and coalesce set_capacity, InitGrowthLeftNoDeleted, and PrepareInsertCommon into a single inline_data_ update after AllocBackingArray.\n- Separate policy.hash_fn(common) into its own statement before policy.hash_slot(...) so the hash_slot function pointer is not loaded before the hash_fn call.\n- In Grow1To3AndPrepareInsert and PrepareInsertSmallNonSoo, call get_char_alloc first, defer loading old_slots and slot_size until after the hash calls, compute new_element_target_slot before transfer_n, and coalesce inline_data_ updates.\n\nPiperOrigin-RevId: 1003754193\n"
    },
    {
      "commit": "3a6b3207c1872407a32710e19f5ea065d3b8bb65",
      "tree": "69547a5b7f16a4fe8dde29eedfafd2897d47c826",
      "parents": [
        "df4d249cc5542cbb5331e8745a96b44fc7d65853"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 21 01:41:30 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 21 01:42:42 2026 -0700"
      },
      "message": "Optimize transfer_unprobed_elements_to_next_capacity_fn to reduce binary size.\n\n1. Simplify TryFindNewIndexWithoutProbing:\n   - Take `hash` directly and compute `h1 \u003d H1(hash)` internally.\n   - Replace `index_diff \u003d old_index - h1; in_floating_group_index \u003d index_diff \u0026 (Group::kWidth - 1); index_diff -\u003d in_floating_group_index; if ((index_diff \u0026 old_capacity) \u003d\u003d 0)` with `index_diff \u003d (old_index - h1) \u0026 old_capacity; if (index_diff \u003c Group::kWidth)`.\n   - Previously, LLVM reassociated `((index_diff - (index_diff \u0026 15)) \u0026 old_capacity) \u003d\u003d 0` into `((old_index - h1) \u0026 (old_capacity \u0026 ~15)) \u003d\u003d 0`, hoisting `old_capacity \u0026 ~15` into an extra loop-invariant register across the entire loop and exhausting all GPRs around `new_g.MaskNonFull()`.\n   - Using `(old_index - h1) \u0026 old_capacity \u003c Group::kWidth` reuses `old_capacity` directly, avoids an extra `\u0026 15` mask when computing `(h1 + index_diff) \u0026 new_capacity`, and frees a loop-invariant register.\n\n2. Pass `old_capacity` to transfer_unprobed_elements_to_next_capacity_fn and align parameters with GrowToNextCapacity:\n   - Eliminates decoding `common.capacity()` in every template instantiation of `transfer_unprobed_elements_to_next_capacity_fn`.\n   - Passing `old_capacity` (used in 4 places across both outer and inner loops) allows `new_capacity \u003d NextCapacity(old_capacity)` (only used in `and` masks) to be spilled to the stack as a memory operand when register pressure is high (e.g., `std::string`).\n\n3. Pass `hash` instead of `(h2, h1)` to `encode_probed_element`:\n   - Avoids keeping `H2(hash)` live across `TryFindNewIndexWithoutProbing` and into the cold `encode_probed_element` path; `H2(hash)` is now computed only when storing to `new_ctrl[new_index]`.\n   - Reduces argument setup instructions at the `encode_probed_element` call site (`old_index` is already in `%rdx`, the 3rd argument register).\n   - Allows the 8-byte and 16-byte `ProbedItem` encoder lambdas to pack `(source_offset \u003c\u003c 7) | H2(hash)` with a single `shldq $0x7, %rsi, %rdx` instruction.\n\nPiperOrigin-RevId: 1003751018\n"
    },
    {
      "commit": "df4d249cc5542cbb5331e8745a96b44fc7d65853",
      "tree": "13adaca5c68c4f3a420a3bf26da09996ebdeb1d4",
      "parents": [
        "22dd800ead4104f3a1fdb64d27dbde822826ca8d"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Tue Oct 20 23:39:18 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 23:40:14 2026 -0700"
      },
      "message": "Use 3 CRC + 3 PMULL streams for CRC32C on Apple Silicon.\n\nPiperOrigin-RevId: 1003692179\n"
    },
    {
      "commit": "22dd800ead4104f3a1fdb64d27dbde822826ca8d",
      "tree": "fd1c0d926c6b01e607307b8dc36bec818eee2104",
      "parents": [
        "b637795e2b7e61185aa7dc554e44c2065abeadd4"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Tue Oct 20 17:28:39 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 17:29:36 2026 -0700"
      },
      "message": "Derive CMake DLL target membership from ABSL_INTERNAL_DLL_FILES.\n\nPreviously, `CMake/AbseilDll.cmake` required manually maintaining `ABSL_INTERNAL_DLL_TARGETS` and `ABSL_INTERNAL_TEST_DLL_TARGETS` in addition to the Copybara-generated `ABSL_INTERNAL_DLL_FILES` and `ABSL_INTERNAL_TEST_DLL_FILES` lists. Whenever new targets were added without updating `ABSL_INTERNAL_DLL_TARGETS`, their sources were compiled into `abseil_dll` and also compiled a second time as `dll_dep` static libraries.\n\nInstead, check whether a library\u0027s sources/headers appear in `ABSL_INTERNAL_DLL_FILES` or `ABSL_INTERNAL_TEST_DLL_FILES` directly in `absl_internal_dll_contains`. Since DLL targets are already created as `INTERFACE` libraries that forward to `abseil_dll` or `abseil_test_dll`, dependent targets and tests can link against `absl::\u003ctarget\u003e` directly without rewriting their dependency lists via `absl_internal_dll_targets`.\n\nPiperOrigin-RevId: 1003521954\n"
    },
    {
      "commit": "b637795e2b7e61185aa7dc554e44c2065abeadd4",
      "tree": "7fa6436b5ba1208e26e48e872ceec02ccacf81e5",
      "parents": [
        "f69044b043f2888fd50a8c00adcd9ae9524a722f"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Tue Oct 20 17:07:48 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 17:09:15 2026 -0700"
      },
      "message": "Migrate unsafe sscanf call in str_format convert_test to safe buffers.\n\n`MatchesPointerString` parsed formatted pointers back into addresses with\n`sscanf(\"%p\")`, which is an unsafe libc call under the Safe Buffers programming\nmodel: Clang\u0027s `-Wunsafe-buffer-usage` (via\n`-Wunsafe-buffer-usage-in-libc-call`) flags every `*scanf` call, because the\ninput must be NUL-terminated and the outputs are passed through type-erased\nvarargs.\n\nMigrate the call to safe buffers by parsing the string with\n`absl::SimpleHexAtoi` into a `uintptr_t`, which takes the input as a bounded\n`absl::string_view`. absl formats a non-null `%p` as if by `%#x` (lowercase hex\nwith a `0x` prefix), padded with spaces, and `SimpleHexAtoi` trims surrounding\nASCII whitespace and accepts the optional `0x` prefix, so every width and\nprecision variant exercised by the test still parses. The matcher is also\nslightly stricter: trailing characters after the hex digits now fail to parse\ninstead of being ignored.\n\nPiperOrigin-RevId: 1003508078\n"
    },
    {
      "commit": "f69044b043f2888fd50a8c00adcd9ae9524a722f",
      "tree": "6cac643432b933d7fcb6056f838c48a648063daa",
      "parents": [
        "c16cdee26b5febcaeb780b0e7d4f99bad266239c"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Tue Oct 20 16:58:30 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 16:59:14 2026 -0700"
      },
      "message": "Pass capacity as a parameter to growth and rehash functions to reduce binary size.\n\n1. **Pass `cap` from `PrepareInsertLargeSlow` to growth and rehash functions**: Pass `cap` (already computed in `PrepareInsertLargeSlow`) as the 4th parameter to `GrowToNextCapacityAndPrepareInsert`, `RehashOrGrowToNextCapacityAndPrepareInsert`, and `DropDeletesWithoutResizeAndPrepareInsert`. This eliminates redundant `common.capacity()` (`(1ULL \u003c\u003c shift) - 1`) bit-shift/mask decoding in each callee and simplifies `old_capacity` / `new_capacity` arithmetic (`leaq (%rbx,%rbx), %r14` and `leaq 1(,%rbx,2), %rsi`) at the entry of `GrowToNextCapacityAndPrepareInsert`.\n2. **Call `AllocBackingArray` right after `get_char_alloc` without spilling `has_infoz`**: Pass `common.has_infoz()` inline to `AllocBackingArray` at the beginning of `GrowToNextCapacityAndPrepareInsert` and reload `common.has_infoz()` right before `if (ABSL_PREDICT_FALSE(has_infoz))` so `has_infoz` does not need to be spilled across `AllocBackingArray` and `GrowToNextCapacityDispatch` (shrinking the stack frame from `0x68` to `0x58` bytes).\n3. **Pass `new_capacity` to `GrowToNextCapacityDispatch` and helpers**: Pass `new_capacity` as the 5th parameter through `GrowToNextCapacity*` (`InitializeMirroredControlBytes`), eliminating repeated `common.capacity()` decoding across the dispatch and encoder functions.\n4. **Reorder `slot_size` load and `OverwriteControlAsFull` in `PrepareInsertLargeSlow`**: Read `const size_t slot_size \u003d policy.slot_size` before `find_first_non_full` so `policy` (`%rsi`) dies at the `HasNoGrowthLeftAndHaveDeleted()` branch (eliminating the stack spill/reload of `policy`), and call `common.OverwriteControlAsFull(ctrl[target.offset])` before `PrepareInsertCommon(common)` so both `common.inline_data_` updates coalesce into a single load-modify-store sequence without an intervening `ctrl_t` load.\n\nPiperOrigin-RevId: 1003502178\n"
    },
    {
      "commit": "c16cdee26b5febcaeb780b0e7d4f99bad266239c",
      "tree": "cb5ad9593797e11462164df3356cb42b442a53cf",
      "parents": [
        "82d323a0d4ecd9157db6b4a5f80683137fef4516"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Tue Oct 20 16:43:49 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 16:45:25 2026 -0700"
      },
      "message": "Reorder operations in GrowToNextCapacityAndPrepareInsert to reduce binary size.\n\nIn `GrowToNextCapacityAndPrepareInsert`, reading `common` and `policy` fields before `policy.get_char_alloc(common)` and `AllocBackingArray` forces LLVM to spill those values to the stack across both calls. In addition, updating `common.inline_data_` in two separate stages—`set_capacity` and `set_blocked_element_count_to_zero` before `AllocBackingArray`, and `PrepareInsertCommon` and `ResetGrowthLeft(new_capacity, common.size(), common)` at the end of the function—requires loading and storing `common.inline_data_` twice and extracting `common.size()` twice.\n\nReorder the operations in `GrowToNextCapacityAndPrepareInsert` to shrink live ranges across calls and coalesce `common.inline_data_` updates:\n1. **Call `policy.get_char_alloc(common)` at function entry**: Because `get_char_alloc` is an indirect call taking a non-const `CommonFields\u0026`, calling it before reading `old_capacity` or `has_infoz` (when only the incoming arguments `common`, `policy`, and `new_hash` are live) eliminates pre-call stack spills and reduces the stack frame from `0x78` to `0x68` bytes.\n2. **Defer `old_*` loads until after `AllocBackingArray`**: `AllocBackingArray` receives `new_capacity` and `/*blocked_element_count\u003d*/0` explicitly and does not read `common.capacity()`, `common.control()`, or `common.blocked_element_count()`. Reading `old_ctrl`, `old_slots`, `old_blocked_element_count`, and `old_size` after `AllocBackingArray` avoids keeping them live across both calls.\n3. **Read `old_size` unconditionally and group all `common` updates together**: Grouping `set_capacity(new_capacity)`, `set_blocked_element_count_to_zero()`, `set_control(new_ctrl)`, `PrepareInsertCommon(common)`, and `ResetGrowthLeft(new_capacity, old_size + 1, common)` right after `AllocBackingArray` merges all four `common.inline_data_` bitfield updates into a single load-modify-store sequence, shares `old_size` between `policy.transfer_n` and `ResetGrowthLeft`, and allows LLVM to thread the `new_capacity \u003e 127` branch of `InitGrowthLeftNoDeleted` directly into the multi-group `else` branch.\n\nPiperOrigin-RevId: 1003492867\n"
    },
    {
      "commit": "82d323a0d4ecd9157db6b4a5f80683137fef4516",
      "tree": "cbc0b42b1bfb81a2611896f35d4a48cab6e700f2",
      "parents": [
        "ad93c34aeaf3a3314b7a09e19c22054840d78fc8"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Tue Oct 20 16:41:34 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 16:42:24 2026 -0700"
      },
      "message": "Use the GCS bucket for the Bazel remote-cache CI configuration.\n\nRBE rejects ActionCache.UpdateActionResult calls when Command.Platform is unset, causing Windows and macOS CI builds using --config\u003dremote-cache to fail to populate the remote cache. Switch build:remote-cache back to the absl-bazel-remote-cache GCS bucket until Windows and macOS RBE platforms are configured.\n\nPiperOrigin-RevId: 1003491410\n"
    },
    {
      "commit": "ad93c34aeaf3a3314b7a09e19c22054840d78fc8",
      "tree": "7cbe0f76edb4f67551a7508ebd3d3bb8f3fb735f",
      "parents": [
        "964041ea2662fb60799554fa28488577b71e69ab"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Tue Oct 20 15:47:47 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 15:48:36 2026 -0700"
      },
      "message": "Select the base pointer rather than the index in `SetCtrlNoSanitizeImpl`.\n\nInstead of computing a conditional index, select the base pointer and index it by `i` (`cloned_ctrl_base[i] \u003d h`).\n\nWhy this improves generated code:\n1. **Decouples `ctrl + cap + 1` from `i`**: With index selection, LLVM selects `cap + 1` vs `0` and must also compute `ctrl + i` into a temporary register (`leaq (%ctrl, %i), %tmp`) before the cloned store `movb %h, (%offset, %tmp)`, placing an extra `leaq` on the critical path of `i` and increasing register pressure. With pointer selection, `ctrl + cap + 1` is independent of `i`, so both stores index directly by `%i_reg` (`movb %h, (%ctrl, %i)` and `movb %h, (%cloned_ctrl_base, %i)`).\n2. **Eliminates `negq` and `xorl` in callers**:\n   - In `PrepareInsertLarge`, `-(cap + 1)` is already in `%r10` (`-1ULL \u003c\u003c shift`). Pointer selection computes `ctrl + cap + 1` via `movq %r8, %rbx; subq %r10, %rbx` off the `offset` (`%rcx`) dependency chain, eliminating `negq %r10`, `xorl %ebx, %ebx`, and `leaq (%r8, %rcx), %r10`.\n   - In `PrepareInsertLargeSlow`, `cap` is already in callee-saved `%r12` across `find_first_non_full_from_h1`, so `-(cap + 1)` no longer needs to be spilled to `-0x38(%rbp)` and reloaded/negated (`movq -0x38(%rbp), %r9; negq %r9; xorl %r10d, %r10d`), shrinking the stack frame from `subq $0x18, %rsp` to `pushq %rax` and simplifying `SetCtrl` to `leaq 0x1(%rbx, %r12), %r9; cmovaeq %rbx, %r9`.\n   - In loop-heavy functions (`DecodeAndInsertImpl`, `RehashOrGrowToNextCapacityAndPrepareInsert`, `ClearBackingArray`), LLVM hoists `ctrl + cap + 1` out of the loop (reusing `ctrl + cap` already computed for `slot_array`) and eliminates `leaq (%ctrl, %i)` inside the loop body.\n   - `InsertOldSooSlotAndInitializeControlBytes` shrinks enough to be inlined into `ResizeFullSooTable`, saving 101 bytes and 39 instructions across the pair.\n\nPiperOrigin-RevId: 1003454810\n"
    },
    {
      "commit": "964041ea2662fb60799554fa28488577b71e69ab",
      "tree": "ca320d1881f7d104ffc0c49b2794bdfaed071327",
      "parents": [
        "c3d4bbb187f90f8610483f2d2c51d26c2ed062f5"
      ],
      "author": {
        "name": "Evan Brown",
        "email": "ezb@google.com",
        "time": "Tue Oct 20 15:13:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 15:14:17 2026 -0700"
      },
      "message": "Add ABSL_SWISSTABLE_ASSUME_SEPARATE_STORAGE and use it in raw_hash_set::control().\n\nApparently, the manual assume we had with pointer values wasn\u0027t doing anything (we previously thought it was valuable but apparently the original change\u0027s codegen effects were side effects of e.g. calling `NumControlBytes(capacity())`).\n\nBenefits of the new `ABSL_SWISSTABLE_ASSUME_SEPARATE_STORAGE(ctrl, this)` in `raw_hash_set::control()`:\n\n* Unlike the previous `reinterpret_cast\u003cuintptr_t\u003e` range comparison inside `ABSL_ASSUME` (which LLVM\u0027s `BasicAA` ignores), `__builtin_assume_separate_storage(ctrl, this)` lowers to an `@llvm.assume` `\"separate_storage\"` operand bundle that `BasicAA` directly uses to prove that pointers derived from `ctrl` (including `slot_array` and iterator slot pointers on the non-SOO path) cannot alias `*this` (or any enclosing object containing the table).\n\n* When a caller mutates an element via an iterator returned by `find()` or `begin()` (e.g. `*it \u003d v` or `it-\u003esecond \u003d v`), the compiler can now prove that the store to the slot does not clobber `CommonFields` metadata (`size`, `capacity`, `seed` in `0(%rdi)`), eliminating redundant reloads of `CommonFields` (and freeing `this` earlier to reduce register pressure) across subsequent `size()`, `capacity()`, or `find()` operations.\n\nBenefits of removing the previous assume from `CommonFields::control()` on `raw_hash_set_benchmark` (`--config\u003dbenchmark --cpu\u003dhaswell`, `llvm-mca -mcpu\u003dznver3`):\n\n* `raw_hash_set::find`: Removing `NumControlBytes(capacity())` from `CommonFields::control()` allows `prefetcht2` (`prefetch_heap_block()`) to be scheduled immediately after loading `ctrl` (`movq 8(%rdi), %rax`), ahead of the capacity mask setup (`movq $-1, %r8; shlxq %rdx, %r8, %rcx`).\n\n* Under `llvm-mca -mcpu\u003dznver3 -iterations\u003d1`, this promotes `prefetcht2` from the second dispatch group (cycle 1) into the first dispatch group (cycle 0) while leaving static L1-hit latency unchanged (36 cycles for `CodegenAbslRawHashSetInt64Find`, 37 cycles for `CodegenAbslRawHashSetInt64FindNeEnd`, 143 cycles for `StringTable::find`), and avoids a stack spill in `DescriptorByNameHash` `raw_hash_set::find\u003cstring_view\u003e` (133 → 131 cycles, RThroughput 29.7 → 29.3).\n\n* `raw_hash_set.cc` (`CommonFields`): Removing `reinterpret_cast\u003cuintptr_t\u003e(this)` from `CommonFields::control()` allows LLVM argument promotion on `ReportInsertMissToInfoz` (11 → 8 instructions, 15 → 10 cycles at `-iterations\u003d1`) and slightly reduces instruction counts in `ResizeAllocatedTableWithSeedChange` (377 → 374 instructions, 244 → 243 cycles) and `EraseMetaOnlyLarge` (78 → 77 instructions, RThroughput 13.7 → 13.3).\n\nPiperOrigin-RevId: 1003430109\n"
    },
    {
      "commit": "c3d4bbb187f90f8610483f2d2c51d26c2ed062f5",
      "tree": "20b1fe25b66b2d8cd5a5f1ae4618c413e3c9aad2",
      "parents": [
        "35cb2992a9281e5c6261f9706384f1b5fa163898"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Tue Oct 20 14:33:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 14:34:10 2026 -0700"
      },
      "message": "Pin vendored Bazel repositories in `macos_xcode_bazel.sh`.\n\n`abseil-cpp_vendor.tar.gz` is generated on Linux, and Bazel\u0027s `.marker` files in the vendor directory record a predeclared input hash that includes the host OS name and architecture. When `macos_xcode_bazel.sh` runs on macOS with `--vendor_dir`, Bazel treats every vendored repository as out-of-date and falls back to downloading external repositories from GitHub over the network. With `common --http_connector_attempts\u003d10` and `common --http_timeout_scaling\u003d2.0` in `.bazelrc`, when a macOS Kokoro VM encounters blackholed connections or DNS failures reaching `github.com`, Bazel retries each failed repository fetch with exponential backoff for over an hour (~60–90 minutes) before failing the build.\n\nAppend `pin(\u0027@@\u003crepo\u003e\u0027)` entries to `VENDOR.bazel` after extracting the vendor archive so Bazel uses the vendored repository contents directly without checking the Linux-generated `.marker` hashes or attempting network downloads.\n\nPiperOrigin-RevId: 1003400638\n"
    },
    {
      "commit": "35cb2992a9281e5c6261f9706384f1b5fa163898",
      "tree": "b8f60290db4bba82d8a60bcede16e7ba7ea71a5c",
      "parents": [
        "54e1f71c75edd0616b8d14c7969de99d52a168fd"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Tue Oct 20 13:36:11 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 13:37:23 2026 -0700"
      },
      "message": "Add missing targets to ABSL_INTERNAL_DLL_TARGETS in AbseilDll.cmake.\n\nSeveral newer Abseil CMake targets were included in `DLL_FILES_ALL` (and thus compiled into `abseil_dll`), but omitted from the `ABSL_INTERNAL_DLL_TARGETS` list in `CMake/AbseilDll.cmake`. In DLL and monolithic shared library builds (`ABSL_BUILD_DLL\u003dTRUE`), this caused those targets to be compiled a second time as standalone `dll_dep` static libraries alongside `abseil_dll`. Also mark `absl::Clock` with `ABSL_DLL` so its vtable is properly exported across the DLL boundary on Windows, and exclude internal test-only helper files from `DLL_FILES_ALL`.\n\nPiperOrigin-RevId: 1003356910\n"
    },
    {
      "commit": "54e1f71c75edd0616b8d14c7969de99d52a168fd",
      "tree": "9b2246c6c95dc635d1a945394e47c887cd4bc064",
      "parents": [
        "98545a414eaf5b9eb4f30c8cc3651316dec0755a"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Tue Oct 20 13:33:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 13:34:12 2026 -0700"
      },
      "message": "Pass capacity and control bytes explicitly to SetCtrl, ResetCtrl, WasNeverFull, and find_first_non_full helpers.\n\nThe compiler must assume that e.g. writing `ctrl[i] \u003d h` in `SetCtrl*` can alias `CommonFields` and indirect calls (`transfer_n`, `hash_slot`) before `SetCtrl*` can clobber memory. Passing `cap` and `ctrl` explicitly to `SetCtrlNoSanitizeImpl`, `SetCtrl`, `BlockCtrl`, `SetCtrlInSingleGroupTable`, `BlockControlBytes`, `WasNeverFull`, `ResetCtrl`, `find_first_non_full_from_h1`, and `find_first_non_full` avoids redundantly reloading `c.capacity()` and `c.control()` from `CommonFields`. Also annotate `BlockControlBytes` with `ABSL_ASSUME(blocked_element_count \u003c\u003d HashtableInlineData::kMaxBlockedElementCount)` and write the cloned control byte first in `SetCtrlNoSanitizeImpl` for better codegen.\n\nPiperOrigin-RevId: 1003354461\n"
    },
    {
      "commit": "98545a414eaf5b9eb4f30c8cc3651316dec0755a",
      "tree": "02a8b7ce7091d70cd05cc3927fd80e255f85b1f3",
      "parents": [
        "5d853e3e6d8b306e8843992bc8f74089f3f8a6ca"
      ],
      "author": {
        "name": "Evan Brown",
        "email": "ezb@google.com",
        "time": "Tue Oct 20 13:12:07 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 13:13:20 2026 -0700"
      },
      "message": "Use bit-shift extraction in `HashtableInlineData::read_byte` on non-x86 targets.\n\nReading `capacity` and `seed` through `reinterpret_cast\u003cconst unsigned char*\u003e(\u0026data_)[index]` allows x86 compilers to emit `movzbl` byte loads without masking on the lookup critical path. On AArch64, however, accessing `data_` via narrow byte loads prevents the compiler from coalescing the `inline_data_` and `control_` loads into a single `ldp` instruction, forces separate `ldrb` + `ldrb` + `ldr` loads when `empty()` or `size()` also inspects `data_`, and causes store-to-load forwarding stalls when a byte load follows a 64-bit store to `data_`.\n\nRestrict the `unsigned char` byte-load path in `HashtableInlineData::read_byte` to x86 targets and extract the requested byte via bit shifts on `data_` on other architectures. This preserves byte-identical x86 codegen while restoring wide `ldr`/`ldp` loads and `ubfx` extraction on AArch64 without changing the bit layout of `HashtableInlineData::data_`.\n\nPiperOrigin-RevId: 1003339153\n"
    },
    {
      "commit": "5d853e3e6d8b306e8843992bc8f74089f3f8a6ca",
      "tree": "5356e81cae110aa4176724b02a38260839314f7b",
      "parents": [
        "8c4d532bceb3e56952c1cb83b8a40e7f18f0cbbf"
      ],
      "author": {
        "name": "Chris Kennelly",
        "email": "ckennelly@google.com",
        "time": "Tue Oct 20 11:23:06 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 11:24:00 2026 -0700"
      },
      "message": "Rename submit_profile_data to submit_unlock_profile_data in SpinLock.\n\nPiperOrigin-RevId: 1003253205\n"
    },
    {
      "commit": "8c4d532bceb3e56952c1cb83b8a40e7f18f0cbbf",
      "tree": "05ff3fd9de5a90d222cf2421ceab6f64bc0b22fe",
      "parents": [
        "9fef193a88a54a765bc301ab9d535a640c215eb7"
      ],
      "author": {
        "name": "Todd Lipcon",
        "email": "tlipcon@google.com",
        "time": "Tue Oct 20 10:08:38 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 20 10:10:15 2026 -0700"
      },
      "message": "Avoid taking deadlock_graph_mu when locking a Mutex with no other locks held\n\nIn debug builds with deadlock detection enabled, locking a Mutex takes the\nglobal deadlock_graph_mu spinlock to look up the Mutex\u0027s graph id. This also\ngives a graph node to every Mutex that is ever locked. But graph ids are used\nonly to add lock-order edges, and there are edges to add only when a thread\nacquires a lock while it holds another.\n\nThis change looks up graph ids only in that case. A held lock gets its id when\nthe thread first acquires another lock while holding it. As a result:\n\n- lock(), lock_shared() and LockWhen() take deadlock_graph_mu only if the\n  thread holds another lock, and try_lock() and try_lock_shared() never do.\n- Mutexes that never take part in nested locking no longer get graph nodes.\n\nThis does not change behavior. DeadlockCheck() already looks up a held lock\u0027s\nid again if it is no longer current, and only acquisitions made while holding\nanother lock use the ids.\n\nDeadlockCheck() looks up the held locks\u0027 ids before the acquired Mutex\u0027s id.\nGraphCycles ranks each new slot above all existing nodes, so if a held lock and\nthe acquired Mutex both get new slots, the edge between them is already in rank\norder.\n\nPiperOrigin-RevId: 1003192716\n"
    },
    {
      "commit": "9fef193a88a54a765bc301ab9d535a640c215eb7",
      "tree": "9cc3218d67f494341969e4a7b5f5cd1987fbb338",
      "parents": [
        "48c8fd3b582e33a302fb2dd59e9ca2676129c883"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Mon Oct 19 23:57:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 23:58:21 2026 -0700"
      },
      "message": "Port macOS Xcode Bazel tests to GitHub Actions.\n\nThis adds the `macos` job matrix to `.github/workflows/ci.yml` and `build:macos` flags to `.bazelrc` to mirror the `macOS Xcode Bazel` and `macOS Xcode Alternate Options Bazel` Kokoro jobs.\n\nPiperOrigin-RevId: 1002873347\n"
    },
    {
      "commit": "48c8fd3b582e33a302fb2dd59e9ca2676129c883",
      "tree": "69ac9b70eed8d49c58fecec8701e6135ac800cb0",
      "parents": [
        "1f095b0f7fb44a7ca0c66179f37e61959e2ed2a2"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Mon Oct 19 21:41:58 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 21:42:46 2026 -0700"
      },
      "message": "Port Windows MSVC and ClangCL Bazel tests to GitHub Actions.\n\nThis adds the `windows` job matrix to `.github/workflows/ci.yml` and `build:windows-msvc` / `build:windows-clangcl` configurations to `.bazelrc` to mirror the 7 Windows Bazel Kokoro jobs.\n\nPiperOrigin-RevId: 1002818299\n"
    },
    {
      "commit": "1f095b0f7fb44a7ca0c66179f37e61959e2ed2a2",
      "tree": "d8656671cfae618e516e5d8e311b26305e9b24e5",
      "parents": [
        "f2189ba59d383d036dcd86d8983528a333965373"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Mon Oct 19 19:32:20 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 19:33:35 2026 -0700"
      },
      "message": "Add GitHub Actions CMake workflows backed by sccache.\n\nCold cache runtime: 17m\nWarm cache runtime: 4m\n\nReplaces the Kokoro CMake presubmit configurations with a reusable GitHub Actions CMake workflow (cmake.yml) and orchestrator jobs in ci.yml covering Linux (GCC/libstdc++, Alpine musl, and install tests via Docker containers), macOS (Xcode), and Windows (MSVC 2022) across Debug/Release and static/shared/monolithic-shared link modes. Compilation is accelerated using Ninja and sccache backed by Google Cloud Storage.\n\nBecause CMake builds and tests run directly on GitHub Actions runners rather than RBE, Debug builds enable compiler optimizations (-Og on GCC/Clang, -O1 -Ob1 -Zc:inline on MSVC) while keeping NDEBUG unset so debug assertions remain active without excessive unoptimized test runtimes (unoptimized -O0 builds with NDEBUG unset remain covered by the RBE-backed Bazel fastbuild jobs). Debug builds also omit debug symbol generation (-g on GCC/Clang, global /Zi or /Z7 and /DEBUG on MSVC) for CI compile/link speed and sccache cache efficiency (on Linux and macOS, Abseil\u0027s ELF/Mach-O symbolizer still symbolizes stack traces via standard symbol tables without DWARF sections).\n\nPiperOrigin-RevId: 1002765632\n"
    },
    {
      "commit": "f2189ba59d383d036dcd86d8983528a333965373",
      "tree": "f3b520d348d27efb10f599e7f6ac38f7faead150",
      "parents": [
        "fb7ad83e63b681ea38f9a73f746ee6dcd61a8249"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Mon Oct 19 16:19:15 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 16:20:00 2026 -0700"
      },
      "message": "Add Linux GCC floor test to Abseil GitHub Actions CI.\n\nConfigures the remote-floor RBE platform and adds the Linux GCC/libstdc++ (floor) job to the GitHub Actions CI matrix using the oss-linux-floor and oss-linux-toolchain-floor Docker images. Also passes suffix.size() explicitly to substr() in absl::EndsWith to avoid a false-positive -Werror\u003dstringop-overread warning under GCC 11 at -O2.\n\nPiperOrigin-RevId: 1002670923\n"
    },
    {
      "commit": "fb7ad83e63b681ea38f9a73f746ee6dcd61a8249",
      "tree": "b04b10d19f6492ebe5a1ed9f9195a23ee3f4dc0b",
      "parents": [
        "2671fc67d33f62a6372b592946503c3bc119be73"
      ],
      "author": {
        "name": "Nathan Chandrasekar",
        "email": "322284620+vera-rubin@users.noreply.github.com",
        "time": "Mon Oct 19 16:12:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 16:13:44 2026 -0700"
      },
      "message": "PR #2195: StrFormat: honor zero padding in slow scientific conversions\n\nImported from GitHub PR https://github.com/abseil/abseil-cpp/pull/2195\n\nSlow scientific `%e` and `%g` conversions dropped zero padding: `%010.0e` and `%010.1g` returned `3e+38` instead of `000003e+38` for `0x1p128`.\n\nBoth emitters now append the computed zeros after any sign.\n\nThe regression covers both exponent signs, positive and negative values, lowercase and uppercase conversions, sign flags, and alternate form. It fails before and passes after the fix. All eight existing str_format test targets pass in both runs with GCC 13.3, C++17, and CMake Release.\n\nFixes #2194\n\nMerge 7429268255037cd3ae1e02d354b66793f047e183 into d522178b54087d2c3855484c1899ce99ad278169\n\nMerging this change closes #2195\n\nPiperOrigin-RevId: 1002666774\n"
    },
    {
      "commit": "2671fc67d33f62a6372b592946503c3bc119be73",
      "tree": "9e33aa85ef3f2cdcc4d94c88978366709d595e1a",
      "parents": [
        "36a47a17e1387cdf4cd80803d3088f00415523ce"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Mon Oct 19 14:14:13 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 14:15:32 2026 -0700"
      },
      "message": "Move annotate_for_bug_detection_on_move to CommonFields.\n\nAdditionally:\n1. guard SOO transfer with `if constexpr` to avoid compiling unnecessary code.\n2. Move out of the line heavy part of `annotate_for_bug_detection_on_move`.\nPiperOrigin-RevId: 1002586317\n"
    },
    {
      "commit": "36a47a17e1387cdf4cd80803d3088f00415523ce",
      "tree": "6a976d4b7f0060aec2161d7afc1ee7c858ff5129",
      "parents": [
        "657b897f79eabe47173e20830a5e29c7b71c2a17"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Mon Oct 19 13:01:18 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 13:01:57 2026 -0700"
      },
      "message": "Pass raw function pointer to Copy and move empty/debug checks inside Copy.\n\n- Change Copy\u0027s callback parameter from absl::FunctionRef\u003cvoid(void*, const void*)\u003e to a raw C function pointer void (*copy_fn)(void* set, void* dst, const void* src) and replace the copy constructor lambda with a static raw_hash_set::copy_slot_fn method.\n- Move AssertNotDebugCapacity() and the empty check (size \u003d\u003d 0) from raw_hash_set(const raw_hash_set\u0026, const allocator_type\u0026) into Copy.\n\nPiperOrigin-RevId: 1002535071\n"
    },
    {
      "commit": "657b897f79eabe47173e20830a5e29c7b71c2a17",
      "tree": "5a5665eabe3fd9d3278e0e3e2c40131c707a5bf0",
      "parents": [
        "ea6faacbe7fb591a6ae3593fb9881519e9a751e0"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Mon Oct 19 12:27:11 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 12:28:05 2026 -0700"
      },
      "message": "Add SHARD_COUNT support and default COST prioritization to absl_cc_test.\n\nAdds optional SHARD_COUNT support to absl_cc_test() in AbseilHelpers.cmake by registering N separate CTest tests with GTEST_TOTAL_SHARDS and GTEST_SHARD_INDEX environment variables, and assigns a higher CTest COST property (100) to sharded tests so CTest schedules them first during parallel test execution.\n\nAlso aligns SHARD_COUNT in CMakeLists.txt with shard_count in Bazel BUILD files:\n- Propagates existing Bazel shard_count values (btree_test, btree_instantiate_test, crc_memcpy_test, sequence_lock_test, mutex_test) to CMakeLists.txt.\n- Adds 4-way sharding in both BUILD and CMakeLists.txt for the remaining slowest tests identified by test suite profiling (long-running CPU/template tests such as raw_hash_set_test, hash_test, cord*_test, str_format_convert_test, and random distribution tests; sleep-bound tests such as waiter_test and simulated_clock_test; and death-test-heavy check tests) to reduce critical-path test latency in both Bazel and CTest.\n\nPiperOrigin-RevId: 1002514203\n"
    },
    {
      "commit": "ea6faacbe7fb591a6ae3593fb9881519e9a751e0",
      "tree": "17810998fd27e5e6b15ec2d8746f4efe868b442c",
      "parents": [
        "6ec106f70acad8917d0e3825b4960f798d287f1f"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Mon Oct 19 12:14:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 12:14:58 2026 -0700"
      },
      "message": "Restore `PclmulStreamType::PCLMUL` for `CpuType::kAmdRome` so buffers ≥ 2048 bytes dispatch to `ExtendWithPclmul` instead of `ExtendWithoutPclmul`.\n\nPiperOrigin-RevId: 1002506107\n"
    },
    {
      "commit": "6ec106f70acad8917d0e3825b4960f798d287f1f",
      "tree": "be5aa36a960c35fd486ae0c7f79dfdf831cdd3cb",
      "parents": [
        "7be6715efc96c1b29bbbda70e2209c59dd5c81dd"
      ],
      "author": {
        "name": "Todd Lipcon",
        "email": "tlipcon@google.com",
        "time": "Mon Oct 19 10:13:11 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 19 10:14:03 2026 -0700"
      },
      "message": "Fix deadlock detection after ForgetDeadlockInfo() on a held Mutex\n\nIn debug builds, the Mutex deadlock detector records each lock order edge\n(A is held while B is acquired) in a global graph keyed by Mutex address.\nForgetDeadlockInfo() erases everything recorded about one Mutex by removing its\ngraph node. The header says to call it when the lock ordering of a Mutex\nchanges. ~Mutex() also calls it in debug builds, so that a new Mutex at a\nreused address does not inherit the old one\u0027s history.\n\nEach thread keeps a list of the locks it holds, so that it can add an edge from\neach of them when it acquires another lock. This list identified a held lock\nby the graph id that was looked up when the lock was acquired, and\nForgetDeadlockInfo() makes that id stale. So, before this change, if any thread\ncalled ForgetDeadlockInfo() on a Mutex while some thread held it:\n\n- The hold was ignored for lock ordering until it was released.\n- unlock() looked up the entry by a newly assigned id, so it never removed the\n  entry. After 40 leaked entries the list was full, and the detector silently\n  stopped checking that thread. For example, if a thread held a Mutex 50\n  times, and each time another thread forgot it, a later a -\u003e b, b -\u003e a\n  inversion on the first thread was not reported.\n- AssertNotHeld() compared a new id with the stale one, so it passed although\n  the thread held the Mutex.\n\nThese effects were accidental. This change identifies held locks by Mutex*\ninstead. ForgetDeadlockInfo() still removes the Mutex\u0027s graph node, and now:\n\n- If the calling thread holds the Mutex, that hold is still ignored for lock\n  ordering until it is released. A new per-entry flag marks such holds.\n- Holds by other threads keep counting. When such a thread next acquires\n  another lock, the detector looks up the Mutex\u0027s new graph id and records the\n  edge. This includes the later hold of a thread that was blocked in lock(), or\n  waiting in CondVar::Wait(), when the Mutex was forgotten.\n- unlock() always removes the entry, so the thread keeps being checked.\n- ~Mutex() also removes any entry for the Mutex on the calling thread, since a\n  Mutex destroyed while locked is never unlocked. Previously, destroying 40\n  locked Mutexes on a thread (as in Mutex.LockedMutexDestructionBug) filled the\n  list and disabled deadlock detection on that thread for the rest of the\n  process.\n- AssertNotHeld() fails for any Mutex that the thread holds, even after\n  ForgetDeadlockInfo().\n\nThese rules do not depend on when a graph id was looked up. This lets a\nfollow-up change look up graph ids only for nested locking, without changing\nbehavior.\n\nAs a side effect, unlock() and AssertNotHeld() no longer look up a graph id, so\nthey no longer take deadlock_graph_mu or create graph nodes. (Before, unlock()\neven created a new node for a forgotten Mutex.) So a lock()/unlock() pair now\ntakes deadlock_graph_mu once instead of twice. ~Mutex() still takes it once.\n\nCode that calls ForgetDeadlockInfo() on a Mutex that other threads hold may now\nget deadlock reports. First, those holds now count. Second, threads that used\nto stop being checked after 40 leaked entries keep being checked, which can\nalso surface real inversions that involve other Mutexes. This mainly affects\ncode that calls ForgetDeadlockInfo() right before every lock, to turn off\ndeadlock detection for one Mutex.\n\nPiperOrigin-RevId: 1002421692\n"
    },
    {
      "commit": "7be6715efc96c1b29bbbda70e2209c59dd5c81dd",
      "tree": "f18adf1c33145baa2f76eb420115a646c943a99b",
      "parents": [
        "017286b60b65c303f4a5cbdefdc6541b1e9b42b4"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sun Oct 18 23:41:19 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Oct 18 23:42:35 2026 -0700"
      },
      "message": "Remove forced errors on misplaced ABSL_ATTRIBUTE_ALWAYS_INLINE and ABSL_ATTRIBUTE_NOINLINE attributes on MSVC\n\nPiperOrigin-RevId: 1002115000\n"
    },
    {
      "commit": "017286b60b65c303f4a5cbdefdc6541b1e9b42b4",
      "tree": "7ecdcdb748f387f206e54cd0b02667fc78617d54",
      "parents": [
        "4cbb3d42f2b0c55908d262f19cbfdbb744bd4f8c"
      ],
      "author": {
        "name": "Sayed Nabhan",
        "email": "nabhan@bugqore.com",
        "time": "Sat Oct 17 13:55:57 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 13:57:33 2026 -0700"
      },
      "message": "PR #2125: fix off-by-one truncation detection in VADoRawLog and DoRawLog\n\nImported from GitHub PR https://github.com/abseil/abseil-cpp/pull/2125\n\ntreat n \u003d\u003d size as truncation in VADoRawLog and DoRawLog: vsnprintf writes only size-1 chars at that boundary, so an exactly-buffer-filling raw log message was losing its last byte and being emitted without the `(message truncated)` marker or trailing newline, letting a following line concatenate onto it.\nMerge 05db3936acd6d53167e224520fb5b55764e48c58 into d522178b54087d2c3855484c1899ce99ad278169\n\nMerging this change closes #2125\n\nPiperOrigin-RevId: 1001563178\n"
    },
    {
      "commit": "4cbb3d42f2b0c55908d262f19cbfdbb744bd4f8c",
      "tree": "44fb4e233ba4c974886c33330ef4ac94f488fcca",
      "parents": [
        "843b28efde9cf54bd0312ff92a6f54d4a27e7137"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Sat Oct 17 00:43:57 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 17 00:45:04 2026 -0700"
      },
      "message": "Update Linux CI and RBE Docker images to LLVM 23.1.3 and GCC 16.2.0.\n\nMigrate Abseil and TCMalloc GitHub Actions workflows and RBE platform targets to the latest oss-linux Docker images built with LLVM 23.1.3, GCC 16.2.0, and Bazelisk 1.29.0.\n\nPiperOrigin-RevId: 1001357278\n"
    },
    {
      "commit": "843b28efde9cf54bd0312ff92a6f54d4a27e7137",
      "tree": "eede9b9f9107baa611c6a121d59d70fab1c105f9",
      "parents": [
        "ca649d15535a6029697b6c339590bd155fa6528f"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Fri Oct 16 14:21:04 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 14:22:18 2026 -0700"
      },
      "message": "Explicitly cast the float argument to double when calling SixDigitsToBuffer in str_cat.h\n\nPiperOrigin-RevId: 1001096141\n"
    },
    {
      "commit": "ca649d15535a6029697b6c339590bd155fa6528f",
      "tree": "dffe1cfef58d71079daac721a01253277159d0b6",
      "parents": [
        "dd142e777635ca7c0b8eb01a46fdd9635f7d1255"
      ],
      "author": {
        "name": "Connal de Souza",
        "email": "connaldesouza@google.com",
        "time": "Fri Oct 16 11:28:25 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 11:29:49 2026 -0700"
      },
      "message": "Interleave CRC32 and PCLMUL stream operations at 16-byte granularity.\n\nSplit 64-byte PCLMUL, VPCLMUL, and CRC32 stream helpers into 16-byte (and\n32-byte VPCLMUL) building blocks and introduce ProcessAllStreams16 to interleave 8B CRC -\u003e PCLMUL -\u003e 8B CRC -\u003e XOR across all active CRC and PCLMUL streams.\n\nThis gives a small performance improvement across all tested platforms. Further performance improvments are possible with follow up changes that will\n1) Extend the parallelized portion of the input stream with this new smaller block size so that the slower tail is shorter, and\n2) Retune the stream counts. A large number of streams is beneficial after the previous two changes.\n\nPiperOrigin-RevId: 1000986346\n"
    },
    {
      "commit": "dd142e777635ca7c0b8eb01a46fdd9635f7d1255",
      "tree": "2f0591c02e0318e4503f36ca9c0a556004b606e2",
      "parents": [
        "f78eecf810299ad943e5bd26200c6bc9942cfeac"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Fri Oct 16 11:03:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 11:03:32 2026 -0700"
      },
      "message": "Simplify mirrored control byte indexing in SetCtrl and remove SetCtrlInLargeTable, which is no longer beneficial.\n\n`SetCtrlNoSanitizeImpl` and `SetCtrlInLargeTable` compute the index of the mirrored control byte as `((i - NumClonedBytes()) \u0026 cap) + (NumClonedBytes() \u0026 cap)` (and `+ NumClonedBytes()` in `SetCtrlInLargeTable`). Because `c.capacity()` is recovered from `log2(cap + 1)` as `(size_t{1} \u003c\u003c log2_cap) - 1`, masking `(i - NumClonedBytes()) \u0026 cap` compiles on x86-64 (`--cpu\u003dhaswell`) to a 10-byte 64-bit immediate load (`movabsq $0x7ffffffffffffff1`) plus `addq` and `bzhiq` (and a second `movl $0xf` + `bzhiq` for `NumClonedBytes() \u0026 cap` in `SetCtrlNoSanitizeImpl`).\n\nReplace the bitmask expression with `i \u003c NumClonedBytes() ? i + cap + 1 : i`, which folds `+ 1` with `cap \u003d (size_t{1} \u003c\u003c log2_cap) - 1` and compiles to a compact compare and conditional move (`cmpq $0xf` + `cmovbq`). This works for both single-group tables (`cap \u003c NumClonedBytes()`, where every `i \u003c cap` is mirrored at `i + cap + 1`) and large tables (`cap \u003e\u003d NumClonedBytes()`, where `i \u003e\u003d NumClonedBytes()` harmlessly overwrites `ctrl[i]` a second time).\n\nPiperOrigin-RevId: 1000968149\n"
    },
    {
      "commit": "f78eecf810299ad943e5bd26200c6bc9942cfeac",
      "tree": "b69a3d84c1f30bad73bfbfc0e50d54d5ddd7fb94",
      "parents": [
        "d97cf937e1db0f3bfc3d2869b05e7af6bf048fd7"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Fri Oct 16 09:53:20 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 16 09:54:45 2026 -0700"
      },
      "message": "Tail-call infoz reporting in PrepareInsertLargeImpl to avoid stack frame.\n\nIn `PrepareInsertLargeImpl`, computing `SlotAddress` before `SetCtrl` and keeping the returned slot pointer and `has_infoz` live across `SetCtrl` and the conditional call to `ReportInsertMissToInfozAndComputeProbeLength` forces Clang to spill a callee-saved register and allocate a stack frame (`pushq %rbp; movq %rsp, %rbp; pushq %rbx; pushq %rax` and matching epilogue) on the hot fast path of `PrepareInsertLarge`, even when `common.has_infoz()` is false.\n\nChange `ReportInsertMissToInfozAndComputeProbeLength` to `ReportInsertMissToInfozAndGetSlot(common, policy, hash, target)`, computing and returning `SlotAddress` inside the cold helper, and check `common.has_infoz()` after `SetCtrl` so `PrepareInsertLargeImpl` can tail-call `ReportInsertMissToInfozAndGetSlot` when `common.has_infoz()` is true and sink the `SlotAddress` arithmetic into the non-infoz fast path. Passing `hash` as the third argument (`%rdx`) and `target` as the fourth argument (`%rcx`) matches `PrepareInsertLarge` and `PrepareInsertLargeSlow`, avoiding any register shuffling on entry or before the tail calls. This eliminates the stack frame and callee-saved register spill on `PrepareInsertLarge`.\n\nPiperOrigin-RevId: 1000921444\n"
    },
    {
      "commit": "d97cf937e1db0f3bfc3d2869b05e7af6bf048fd7",
      "tree": "b9533bbed2e0c2c36c70b7ed35feb6d0b06c877f",
      "parents": [
        "a7e3c5fa7fedcc244272d8dd05381bab1b080dc4"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 15 21:15:05 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:13:16 2026 -0700"
      },
      "message": "Internal cleanup\n\nPiperOrigin-RevId: 1000588816\n"
    },
    {
      "commit": "a7e3c5fa7fedcc244272d8dd05381bab1b080dc4",
      "tree": "a129fac0e35d669d5c92d6f1c6292c83f5fae937",
      "parents": [
        "7bc6ce715aa524f331d1a620f81242a4728d96aa"
      ],
      "author": {
        "name": "Mike Kruskal",
        "email": "mkruskal@google.com",
        "time": "Thu Oct 15 20:04:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:12:48 2026 -0700"
      },
      "message": "Port Linux Bazel tests to GitHub Actions.\n\nUses RBE and the shared lightweight Docker toolchain setup to offload compilation and test execution to GCP, mirroring the 10 Linux \"latest\" Bazel Kokoro jobs 1:1.\n\nPiperOrigin-RevId: 1000564567\n"
    },
    {
      "commit": "7bc6ce715aa524f331d1a620f81242a4728d96aa",
      "tree": "fbdec725af7cfdd7d3758ebbf6a5535ec6367c13",
      "parents": [
        "c4eb48bd61f1c9bc35f4117066f8f3d38a968f25"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 15 13:33:08 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:12:21 2026 -0700"
      },
      "message": "Add `ABSL_UNSAFE_BUFFERS` macro to `\u003cabsl/base/attributes.h\u003e` for locally suppressing `-Wunsafe-buffer-usage` Clang warnings when raw buffer manipulation is unavoidable.\n\nPiperOrigin-RevId: 1000355361\n"
    },
    {
      "commit": "c4eb48bd61f1c9bc35f4117066f8f3d38a968f25",
      "tree": "a875b3860d6363063b0fe03f246ef1c10e29ff44",
      "parents": [
        "a6e946a53f14d30c34b2915ff433076c58bd49aa"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 15 12:46:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:11:55 2026 -0700"
      },
      "message": "Add `CpuType::kAmdRyzenV3000` to the CRC32C dispatch table.\n\nPiperOrigin-RevId: 1000325427\n"
    },
    {
      "commit": "a6e946a53f14d30c34b2915ff433076c58bd49aa",
      "tree": "61fdfd2bc662e4f4fe2598dde3e3eccaa934ef34",
      "parents": [
        "73224f617590d68585ebed70b33f34d5dee1f45a"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 15 07:11:48 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:11:31 2026 -0700"
      },
      "message": "Migrate ABSL_PRINTF_ATTRIBUTE to [[gnu::format(...)]]\n\nPiperOrigin-RevId: 1000114474\n"
    },
    {
      "commit": "73224f617590d68585ebed70b33f34d5dee1f45a",
      "tree": "e5d14d9f3ba9c9b6cb02ed65f30d73a32e7682e1",
      "parents": [
        "42e02c7ebfc4ac74de7a0e4676268c887436f3b4"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 15 02:23:03 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 15 23:09:57 2026 -0700"
      },
      "message": "functional: Add C++26 bind_front\u003cConstFn\u003e(args...)\n\nPassing a function pointer or pointer-to-member as a runtime argument to\n`absl::bind_front(func, args...)` stores the pointer inside the returned\nfunctor (8 bytes for a function or data-member pointer, 16 bytes for a\nmember-function pointer) and erases the target identity into the pointer\ntype. When the resulting functor is passed to algorithms such as\n`std::sort`, the compiler cannot inline member function calls or\nconstant-propagate member offsets across the indirect call.\n\nImplement the C++26 `absl::bind_front\u003cauto ConstFn\u003e(BoundArgs\u0026\u0026...)`\noverload [1], which binds a compile-time constant invocable as a non-type\ntemplate parameter. Where the standard library provides\n`std::bind_front\u003cConstFn\u003e`, `absl::bind_front` delegates to it instead. That\nis detected with `__cpp_lib_bind_front \u003e\u003d 202306L`, plus\n`_LIBCPP_VERSION \u003e\u003d 230000` because libc++ 17 through 22 define the macro as\n202306L in C++26 mode without implementing the overload.\n\nabsl\u0027s implementation returns `absl::bind_front(ConstFnInvoker\u003cConstFn\u003e{},\nargs...)`, where the stateless `ConstFnInvoker` calls `ConstFn`. This\nreuses the runtime overload\u0027s checks on the bound arguments, and doesn\u0027t\npromise properties of the result (such as emptiness) that the standard\ndoesn\u0027t, since those would break once `absl::bind_front` delegates to\n`std::bind_front`. Include `\u003cfunctional\u003e` in front_binder.h for\n`std::invoke`, which `ConstFnInvoker` uses.\n\nBesides the basic uses, the tests check that `ConstFn` is always invoked\nthrough its `const\u0026` overload whatever the value category of the result,\nand that the result is not invocable if that overload is deleted. An\nadapted copy of libc++\u0027s tests for `std::bind_front\u003cConstFn\u003e` [2] also\npassed against this implementation. Their remaining cases are covered by\nthe existing tests or only exercise the runtime `bind_front`, so they were\nnot kept.\n\n[1] https://en.cppreference.com/cpp/utility/functional/bind_front\n[2] https://github.com/llvm/llvm-project/tree/018a9e4a74ba5d383351bda907a8b116bc5d8c47/libcxx/test/std/utilities/function.objects/func.bind.partial\n\nPiperOrigin-RevId: 999982148\n"
    },
    {
      "commit": "42e02c7ebfc4ac74de7a0e4676268c887436f3b4",
      "tree": "ce112f1b356c8fe4ea2a1c257f7c9f63119371e2",
      "parents": [
        "386c165d54b38a17616a0ff98ba3339c93e8e35b"
      ],
      "author": {
        "name": "Javid Khan",
        "email": "dxbjavid@gmail.com",
        "time": "Wed Oct 14 07:06:18 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 14 07:07:39 2026 -0700"
      },
      "message": "PR #2183: fix year overflow on leap-second carry in ParseCivilTime\n\nImported from GitHub PR https://github.com/abseil/abseil-cpp/pull/2183\n\nParseCivilTime parses the year on its own, normalises it into a small range around 2400 so the rest of the string can go through ParseTime, then rebuilds the result by adding the field-normalisation carry back onto the original year. The carry itself is small, but the year it is added to comes straight from the input, and at the largest representable year a trailing leap second rolls the value one past the maximum, so the addition overflows civil_year_t. It is reachable from untrusted text because the civil-time types parse flag and configuration strings through this path, and a value like 9223372036854775807-12-31T23:59:60 triggers it: a sanitiser build reports signed integer overflow at the carry, while an ordinary build silently wraps the year to the minimum and still returns success. I came across it while reading the carry handling that was added recently. Bounding the addition against the type limits and failing the parse when it would overflow leaves every normal year untouched and only rejects the few values that cannot be represented. I have added a regression case beside the existing carry test.\nMerge d9ba674d286e8bdd4614956842e1a30b00a0763b into 511e3f4b7ee50848e52dad3b054887e19def5ad8\n\nMerging this change closes #2183\n\nPiperOrigin-RevId: 999343915\nChange-Id: Ic18834bda53fae4aa21e1f17de5fbeac3eb95ae0\n"
    },
    {
      "commit": "386c165d54b38a17616a0ff98ba3339c93e8e35b",
      "tree": "f0200f5bbb7ab0234533a2715f76662d67191e11",
      "parents": [
        "0c6ee24d3ab519131f557d76c5ea023e8ac7805e"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Wed Oct 14 02:37:44 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 14 02:39:21 2026 -0700"
      },
      "message": "Move out of line hash/eq consistency assertions in raw_hash_set.\n\nPiperOrigin-RevId: 999231519\nChange-Id: Ide7922a86ad7cb5f6fbf3e55f76a5d75e85131ab\n"
    },
    {
      "commit": "0c6ee24d3ab519131f557d76c5ea023e8ac7805e",
      "tree": "ab1de59d49b6af65c43341483f7696f19545848a",
      "parents": [
        "d522178b54087d2c3855484c1899ce99ad278169"
      ],
      "author": {
        "name": "Todd Lipcon",
        "email": "tlipcon@google.com",
        "time": "Tue Oct 13 19:06:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 13 19:08:35 2026 -0700"
      },
      "message": "Space out GraphCycles ranks so that InsertEdge can often move just one node\n\nIn debug builds, absl::Mutex deadlock detection records each lock-order edge\nwith GraphCycles::InsertEdge(held, acquired), under a global lock. GraphCycles\nkeeps node ranks in topological order: rank(x) \u003c rank(y) for each edge x-\u003ey.\nWhen a new edge breaks this order, InsertEdge uses the Pearce-Kelly algorithm\nto detect a cycle or repair the ranks.\n\nBefore this change, ranks were a dense permutation of [0, N), and each new slot\ngot the next rank, above all existing nodes. So when a newly created mutex x is\nheld while an older mutex y is acquired, which is common, the edge x-\u003ey often\nbreaks the order. Pearce-Kelly then visits every descendant of y that ranks\nbelow x (nearly all of them, since x is new), and sorts and renumbers them,\njust to put one node in order. With no unused ranks between nodes, even moving\none node means renumbering everything in between.\n\nThis change leaves unused ranks between nodes, so that InsertEdge can often fix\nthe order by moving just x or just y:\n\n- Ranks are now int64_t, and new slots get ranks 2^32 above the highest rank.\n  All slots, including free slots, are kept in a doubly linked list sorted by\n  rank. As before, a free slot keeps its rank (and now its place in the list),\n  which is reused with the slot.\n- If rank(x) \u003e rank(y), InsertEdge(x, y) first tries to move x below y, which\n  requires all in-neighbors of x to rank below y. x moves to the midpoint\n  between y and the slot just below y, or 2^32 below the lowest rank if x has\n  no in-neighbors. If x cannot move, InsertEdge tries the symmetric move of y\n  above x, which requires all out-neighbors of y to rank above x. If neither\n  move works, Pearce-Kelly runs as before.\n- Ranks stay unique by construction: each new rank is strictly between the\n  ranks of two adjacent slots in the list, or beyond the lowest or highest\n  rank, so no other slot can have it. As before, the Pearce-Kelly reorder\n  reassigns the ranks of the reordered nodes among them. It now also gives each\n  one the list place that goes with its new rank.\n- A move never hides a cycle: the condition for moving x also proves that y\n  cannot reach x, since every node reachable from y ranks at or above y, but\n  every in-neighbor of x ranks below y. The same holds for moving y, so all\n  cycle detection still happens in the Pearce-Kelly path.\n\nWhy not simply give new nodes decreasing initial ranks (below all existing\nnodes)? That makes new -\u003e old edges immediately ordered, but it inverts the\norder for old -\u003e new edges, such as when a long-lived container mutex locks a\nnewly created child mutex, or when a chain of mutexes is acquired in creation\norder. Every old -\u003e new edge then triggers a Pearce-Kelly traversal and dense\nrenumbering, making sequential chain construction (BM_StressTest) quadratic:\nO(N) per edge (114 us/node at N\u003d2048 and 2.9 ms/node at N\u003d32768, vs. under 0.5\nus/node). Spacing ranks out and moving either endpoint handles both directions\nin O(degree) time.\n\nLimits and trade-offs:\n\n- InsertEdge does not try to move x if x has more than 16 in-neighbors to\n  check, or y if y has more than 16 out-neighbors. If neither can move, it\n  falls back to Pearce-Kelly. This bounds the cost of each attempt.\n- The 2^32 spacing leaves room for about 32 consecutive moves into the gap\n  between two adjacent new slots. When the two ranks around a gap are less than\n  2 apart, Respace() first spreads out a run of slots around the gap, keeping\n  their order. Starting with the two slots around the gap, the run doubles in\n  size until its slots can be evenly spaced at least 2^16 apart between the\n  ranks just outside it (-2^62 and 2^62 beyond the ends of the list).\n- Ranks beyond the lowest and highest ones stay within [-2^62, 2^62], which\n  leaves room for about 2^30 moves (or new slots) at each end. When that runs\n  out, all slots are respaced evenly across [-2^61, 2^61] in O(N) time, which\n  leaves room for 2^29 more at each end.\n- Slot indices are still int32_t, and the ranks have room for 2^31 slots, so\n  there is no new limit on node count.\n- Node grows by 16 bytes, for the 64-bit rank and two 32-bit list links (with\n  alignment). It was already over 400 bytes, since it holds a 40-entry stack\n  trace.\n\nNew tests cover each kind of move, the fallbacks to Pearce-Kelly, and both\nkinds of respacing. A new test-only method, TestOnlySetRankStride(), lets a\ntest make the ranks beyond the lowest and highest ones run out after a few\nmoves, to exercise the respacing of all slots.\n\nPiperOrigin-RevId: 999040867\nChange-Id: I3353404e681c094b3cbd4978f384c0415200b2ec\n"
    },
    {
      "commit": "d522178b54087d2c3855484c1899ce99ad278169",
      "tree": "e54b9b2ec152ecd0e6322888b35bae821cb702e4",
      "parents": [
        "486d2e66fdc681398c9fb317f12ce9f299798edf"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Tue Oct 13 12:26:41 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 13 12:27:28 2026 -0700"
      },
      "message": "Add branch prediction hints to the H2 match loops in `find_large` and `find_or_prepare_insert_large`.\n\nIn the previous range-for loop, clang would by default predict that the loop would have multiple iterations. We change the code to instead predict one iteration of the loop (which is the common case for find-hit). Even with iFDO enabled (in which case the ABSL_PREDICT_TRUE/ABSL_PREDICT_FALSE aren\u0027t as important), splitting the loop entry condition from the loop continuation condition allows for better optimization because the probability of loop entry is very different from loop continuation.\n\nPiperOrigin-RevId: 998814452\nChange-Id: Ic4dfa2ad21a0fdb12f1350f71d3e36a6f7cd7cfa\n"
    },
    {
      "commit": "486d2e66fdc681398c9fb317f12ce9f299798edf",
      "tree": "93eaa8d6dfba25865777643a9a8cda06e3f6d4b2",
      "parents": [
        "3e0f11b91ce9748de142036beb088d8632043ca8"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Tue Oct 13 09:01:24 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 13 09:03:02 2026 -0700"
      },
      "message": "Add push_front and emplace_front to absl::chunked_queue.\n\nThis implements push_front and emplace_front operations, prepending elements into available space in the head block or allocating a new head block when needed. Corresponding unit tests, exception safety tests, fuzzing actions, and benchmarks are also added.\n\nPiperOrigin-RevId: 998673257\nChange-Id: Ibe23e6276d1b016128c2505c756acb59ae9688ac\n"
    },
    {
      "commit": "3e0f11b91ce9748de142036beb088d8632043ca8",
      "tree": "22c1448bf5cc838b73c55b1d87c205aef72ebfca",
      "parents": [
        "834415d357f0c24ca1a2528dcc593f73aab7f71f"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Tue Oct 13 07:14:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Tue Oct 13 07:15:47 2026 -0700"
      },
      "message": "Make absl::StrSplit iterators valid input iterators.\n\n`SplitIterator` stores a copy of its delimiter, so the `const` data members of `ByAnyChar`, `ByLength` and `MaxSplits` made their split iterators not-assignable, unlike those of `ByString` and `ByChar`. Dropping that `const` makes the iterators of all built-in delimiters valid input iterators, without changing behavior. The `SimpleDelimiter` example in the documentation drops its `const` member too, so custom delimiters based on it avoid the same problem.\n\nPiperOrigin-RevId: 998612982\nChange-Id: I2926cecacc4cfa3569899bc4bac806ad8be585f4\n"
    },
    {
      "commit": "834415d357f0c24ca1a2528dcc593f73aab7f71f",
      "tree": "5ab0878032422881d8872af2ff5c56745952067f",
      "parents": [
        "2bcd25dfd9dd2adb03487b9404874273898f78fd"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Mon Oct 12 16:57:59 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 16:58:46 2026 -0700"
      },
      "message": "Internal cleanup\n\nPiperOrigin-RevId: 998239919\nChange-Id: I568692397bce68d8e98bfe13071faea6fc805760\n"
    },
    {
      "commit": "2bcd25dfd9dd2adb03487b9404874273898f78fd",
      "tree": "ed559e8040c0c2906568a0b5deeab60f87456789",
      "parents": [
        "5051209224bc6ce6f93382d42b015f7864ae4a37"
      ],
      "author": {
        "name": "Vitaly Goldshteyn",
        "email": "goldvitaly@google.com",
        "time": "Mon Oct 12 15:00:53 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 15:01:33 2026 -0700"
      },
      "message": "Move out of line hash/eq consistency assertions in raw_hash_set.\n\nMove the debug-only assertion logic verifying that eq(k1, k2) implies hash(k1) \u003d\u003d hash(k2) into a non-templated helper function in raw_hash_set.cc to reduce code size.\n\nAlso replace absl::FunctionRef with function pointers in raw_hash_set internal helpers.\n\nReplaces uses of absl::FunctionRef with raw function pointers and void* context pointers across internal growth, insertion, and assertion functions (such as GrowSooTableToNextCapacityAndPrepareInsert, PrepareInsertSmallNonSoo, and AssertHashEqConsistentImpl). Also adds a static GetHash helper method to HashKey.\n\nPiperOrigin-RevId: 998176305\nChange-Id: Ie5e6219e019f3b1fa8668eda00f8637ced74b856\n"
    },
    {
      "commit": "5051209224bc6ce6f93382d42b015f7864ae4a37",
      "tree": "5ab0878032422881d8872af2ff5c56745952067f",
      "parents": [
        "d2b025481fafadcb52f336162a4e46d56ea55762"
      ],
      "author": {
        "name": "Evan Brown CA",
        "email": "ezb@google.com",
        "time": "Mon Oct 12 14:22:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 14:23:23 2026 -0700"
      },
      "message": "Canonicalize heterogeneous string keys to `absl::string_view` in find_large/find_or_prepare_insert_large.\n\nWhen the container uses heterogeneous string lookup (`StringHash`/`StringEq`) and `key_arg\u003cK\u003e` is convertible to `absl::string_view`, convert `key` to `absl::string_view` before calling `find_large`.\n\nThis has three benefits:\n1. Avoid redundant SSO branches/`strlen()` calls.\n2. Deduplicates `find_large\u003cstd::string\u003e`, `find_large\u003cconst char*\u003e`, and `find_large\u003cabsl::string_view\u003e` into a single `find_large\u003cabsl::string_view\u003e` template instantiation per table type. Ditto for `find_large_or_prepare_insert`.\n3. Avoid materializing `string_view` on the stack just to pass a reference to it when we can instead pass it by value in registers.\n\nNote: we use `type_identity_t` and `static_assert`s to ensure that the key type in find*_large is `FindLargeKey`. (`type_identity_t` ensures that the template argument is not deduced and must be specified explicitly.)\n\nAlso, don\u0027t use `key_arg` in `find_small`/`find_large` since they\u0027re internal (i.e. `private`) functions.\n\nPiperOrigin-RevId: 998154090\nChange-Id: Iefc9065bdf987586c1b1b13c505eb8392995ecb8\n"
    },
    {
      "commit": "d2b025481fafadcb52f336162a4e46d56ea55762",
      "tree": "c7295f38b14c7e7e617b8b825d41dff0eef37c2e",
      "parents": [
        "47e7a807de0b3c6ab9aeabce262fbec7eb78bf4f"
      ],
      "author": {
        "name": "Evan Brown",
        "email": "ezb@google.com",
        "time": "Mon Oct 12 13:46:49 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 13:49:27 2026 -0700"
      },
      "message": "Inline the IsValid() check in AssertNotDebugCapacity() to avoid unduly slowing down tests.\n\nPiperOrigin-RevId: 998131097\nChange-Id: I9cbaa70c89537151b84beee91b5176f439e77679\n"
    },
    {
      "commit": "47e7a807de0b3c6ab9aeabce262fbec7eb78bf4f",
      "tree": "42afcd51625ea2092e32fb0ae8fe135190f48775",
      "parents": [
        "96473ab0263eb822a188e1dcfb0caa36e050ee47"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Mon Oct 12 11:14:50 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 11:15:24 2026 -0700"
      },
      "message": "Prepare to migrate ABSL_PRINTF_ATTRIBUTE to [[gnu::format(...)]]\n\nPiperOrigin-RevId: 998036008\nChange-Id: I316e9a6cfb6635b14e95df3ce375ec3f164027a7\n"
    },
    {
      "commit": "96473ab0263eb822a188e1dcfb0caa36e050ee47",
      "tree": "b0c13155c0ec4804a69c7b42ce1cefcce7f9a51b",
      "parents": [
        "89b5aa064632c34abd999ff96ff0d740dcbaca0e"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Mon Oct 12 11:06:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 11:07:25 2026 -0700"
      },
      "message": "Prepare to migrate ABSL_PRINTF_ATTRIBUTE to [[gnu::format(...)]]\n\nPiperOrigin-RevId: 998030237\nChange-Id: Id4ee1366e6a578391f8a745926c360f73080ba06\n"
    },
    {
      "commit": "89b5aa064632c34abd999ff96ff0d740dcbaca0e",
      "tree": "640758deff7cb61f145280e008ad4fc5a3f0abe0",
      "parents": [
        "511e3f4b7ee50848e52dad3b054887e19def5ad8"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Mon Oct 12 10:25:00 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 10:25:49 2026 -0700"
      },
      "message": "Factor out and improve detection logic for pass-by-value vs. pass-by-reference\n\nPiperOrigin-RevId: 998002888\nChange-Id: I73d1f5ad07fffde05992919e439fea2d36350c70\n"
    },
    {
      "commit": "511e3f4b7ee50848e52dad3b054887e19def5ad8",
      "tree": "3e990382be603dd27701d4a0e06d85cac9397bd6",
      "parents": [
        "d292c59c4b88018a8e0532bf5bd3d173513f4921"
      ],
      "author": {
        "name": "Derek Mauro",
        "email": "dmauro@google.com",
        "time": "Mon Oct 12 07:30:50 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Mon Oct 12 07:31:54 2026 -0700"
      },
      "message": "Import of CCTZ from GitHub.\n\nPiperOrigin-RevId: 997907806\nChange-Id: I8e78d3b03558d0ae7f4f30a3ef6d3d7832eff9cc\n"
    },
    {
      "commit": "d292c59c4b88018a8e0532bf5bd3d173513f4921",
      "tree": "3b24233e91bab233084a8acdff08bad7e0b77e9a",
      "parents": [
        "30bc83809d1653901f0a586600aedb8ff830d3df"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sun Oct 11 19:28:06 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sun Oct 11 19:29:03 2026 -0700"
      },
      "message": "Internal cleanup\n\nPiperOrigin-RevId: 997624987\nChange-Id: I318d54cde1928cc7a48200098d20726493809c95\n"
    },
    {
      "commit": "30bc83809d1653901f0a586600aedb8ff830d3df",
      "tree": "714dd43a0839e159ea85d7e882f599f20281337f",
      "parents": [
        "5856888398d1000085ba288af0b577c3a30bafc3"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 22:32:13 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 22:33:07 2026 -0700"
      },
      "message": "Use a --login shell everywhere in CI instead of being inconsistent\n\nPiperOrigin-RevId: 997313810\nChange-Id: Ibbb125e769059e9bfa5ba3baa0ffdf438b26859d\n"
    },
    {
      "commit": "5856888398d1000085ba288af0b577c3a30bafc3",
      "tree": "c29058142e5a7173ab25b5e6008d9616c3952ba6",
      "parents": [
        "983e606b72e91e1279b4e208b9266b41cc880897"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 21:54:51 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 21:55:36 2026 -0700"
      },
      "message": "Use bind mounts consistently in CI\n\nPiperOrigin-RevId: 997304402\nChange-Id: I772b8e506ebc686ad5f9ae4e6ea6618e5be0b2df\n"
    },
    {
      "commit": "983e606b72e91e1279b4e208b9266b41cc880897",
      "tree": "a13196013b652196e3b2741133083323c4a7399a",
      "parents": [
        "594a3188bec48a9aa7c6cae85c7e5a96429c14f0"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 21:46:33 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 21:48:08 2026 -0700"
      },
      "message": "Internal cleanup\n\nPiperOrigin-RevId: 997301994\nChange-Id: I4203f53a1380b2fa59cc67f8cdfa6908e90056ad\n"
    },
    {
      "commit": "594a3188bec48a9aa7c6cae85c7e5a96429c14f0",
      "tree": "9fdc478f97a85678c19b73a9467c340a17c80233",
      "parents": [
        "a471a78a546fc65115aa9a708c41a7067ba44450"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 21:33:36 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 21:34:19 2026 -0700"
      },
      "message": "Use --remote_cache consistently instead of --remote_http_cache in CI scripts\n\nPiperOrigin-RevId: 997298572\nChange-Id: Ie3e51954597e4ed068279a1a64a604549f017787\n"
    },
    {
      "commit": "a471a78a546fc65115aa9a708c41a7067ba44450",
      "tree": "7a641f0caa42ab854d511a9759bed1370d4b5852",
      "parents": [
        "e033ec14713de2d476303492cf90bbcc10b2beda"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 17:50:13 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 17:51:09 2026 -0700"
      },
      "message": "Use the same Bazel vendor mode configuration on linux_clang-latest_libcxx_asan_bazel.sh and linux_clang-latest_libcxx_tsan_bazel.sh\n\nPiperOrigin-RevId: 997244539\nChange-Id: I63eec9311254b77172bc5d74df338d71f87179a7\n"
    },
    {
      "commit": "e033ec14713de2d476303492cf90bbcc10b2beda",
      "tree": "397604b5a9ce4d1ed1100dabc5cf51027c17fb14",
      "parents": [
        "92352077e4116012f2c43d7ba4eba799c449fc9d"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 16:25:10 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 16:26:37 2026 -0700"
      },
      "message": "Fix bug in Batch files when checking for unset variables\n\nPiperOrigin-RevId: 997224152\nChange-Id: I8d032522a296b59b59e2ed7246b908ccf0bb471e\n"
    },
    {
      "commit": "92352077e4116012f2c43d7ba4eba799c449fc9d",
      "tree": "8b9c6ef1023f6acbc9161a44c05052772a5e65e5",
      "parents": [
        "ceae244acf64bd13872a0c1d8c2d65368e3a30c6"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 16:24:16 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 16:25:07 2026 -0700"
      },
      "message": "Add missing quotes in CI shell scripts\n\nPiperOrigin-RevId: 997223887\nChange-Id: I8807741bda444e83c17474a59aa1225bebce0649\n"
    },
    {
      "commit": "ceae244acf64bd13872a0c1d8c2d65368e3a30c6",
      "tree": "57b362ad0a932d9dd4fab84e263d4059a13d105c",
      "parents": [
        "00dbc1bc3c98ace0905a8ac075f1085d48368cc9"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 15:53:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 15:54:28 2026 -0700"
      },
      "message": "Normalize C++ standard selection to STD\n\nFix typos and inconsistency between ABSL_CMAKE_CXX_STANDARDS, ABSL_CMAKE_CXX_STANDARD, and STD\n\nPiperOrigin-RevId: 997216920\nChange-Id: I7ce6b3305725d247515227e6b8cb2b0d3d12478c\n"
    },
    {
      "commit": "00dbc1bc3c98ace0905a8ac075f1085d48368cc9",
      "tree": "62e29fa21addc2f4ace690925e961b85b5846437",
      "parents": [
        "dcf17eb465da0f5e80621c84eea1c6e0ed1e9ae5"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 15:50:27 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 15:51:29 2026 -0700"
      },
      "message": "Remove redundant USE_BAZEL_CACHE from CI configs\n\nPiperOrigin-RevId: 997216247\nChange-Id: Ied8b942e62878a0fa8a1ae88895060891fe20614\n"
    },
    {
      "commit": "dcf17eb465da0f5e80621c84eea1c6e0ed1e9ae5",
      "tree": "00d267959ffbffe04bc6ec8490f04c85f6d56866",
      "parents": [
        "e9783ed1b86c7000d2277e009c75bdd91db477db"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 15:15:29 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 15:16:01 2026 -0700"
      },
      "message": "Clean up environment variables used in CI\n\nPiperOrigin-RevId: 997208159\nChange-Id: I5f1590dbc1a686c51db5f4582ed304d0e0d28c51\n"
    },
    {
      "commit": "e9783ed1b86c7000d2277e009c75bdd91db477db",
      "tree": "b1ff7d3d91dd05f0566cec367bfe0f5b2c8ba376",
      "parents": [
        "977291adba46557c1c58e6a285268ddcde49b6a0"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 14:54:00 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 14:54:39 2026 -0700"
      },
      "message": "Clean up environment variables used in CI\n\nPiperOrigin-RevId: 997203387\nChange-Id: Icd2f8f899d99ad1214efd0d07428455c79cef346\n"
    },
    {
      "commit": "977291adba46557c1c58e6a285268ddcde49b6a0",
      "tree": "a3ac395ad9e86ec1b4ca4e5e9130e0bdf92279c7",
      "parents": [
        "d98159abdcabcfce94d8fd0d67b0cf44153b3796"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 14:42:00 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 14:42:46 2026 -0700"
      },
      "message": "Clean up environment variables used in CI\n\nPiperOrigin-RevId: 997200357\nChange-Id: I938573417ff487ff3ea494f698c53ca3355c4898\n"
    },
    {
      "commit": "d98159abdcabcfce94d8fd0d67b0cf44153b3796",
      "tree": "478654267d128bb23103830198f2b3cbe1c5f293",
      "parents": [
        "245566206ec7a8c173a29d93735865c4e2daf33d"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 14:35:16 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 14:36:00 2026 -0700"
      },
      "message": "Clean up environment variables used in CI\n\nPiperOrigin-RevId: 997198315\nChange-Id: I94de462ea432aa022d8035e020ade07e4dedbcaa\n"
    },
    {
      "commit": "245566206ec7a8c173a29d93735865c4e2daf33d",
      "tree": "0216ea816430ab71cca4c8370d09b9785b3bb3e3",
      "parents": [
        "52d40e23889e99ad2d12f6e4ea9d204934816a12"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Sat Oct 10 13:51:42 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Sat Oct 10 13:52:25 2026 -0700"
      },
      "message": "Clean up C++ standard versions used in CI\n\nPiperOrigin-RevId: 997184609\nChange-Id: I9d6a1c5df74cbb26d50efa990dd0e8b6151ced4f\n"
    },
    {
      "commit": "52d40e23889e99ad2d12f6e4ea9d204934816a12",
      "tree": "da4512d1655ee04586af8c41dee4ae500cba2c62",
      "parents": [
        "7b3da21e8d5fc78c0573849572374e4a57336335"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Fri Oct 09 13:20:15 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 09 13:22:15 2026 -0700"
      },
      "message": "Remove the limit member from chunked_queue iterators to reduce absl::chunked_queue metadata from 56B to 40B.\n\nInstead of caching the limit pointer in each iterator, calculate it on demand via block-\u003elimit(). This reduces the size of chunked_queue iterators (and chunked_queue itself, which holds head and tail iterators) from three pointers to two. Update boundary checks, assertions, and tests accordingly.\n\nPiperOrigin-RevId: 996717946\nChange-Id: I4be0808f89c535d28e7cd0fda1bd32a03908c2f9\n"
    },
    {
      "commit": "7b3da21e8d5fc78c0573849572374e4a57336335",
      "tree": "0a4ba9d4fb2190ff05a141a5675339277de60b22",
      "parents": [
        "ef2fc625b473701dc9fa67661fdac37ebbb3e2d8"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Fri Oct 09 09:16:30 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Fri Oct 09 09:17:18 2026 -0700"
      },
      "message": "Migrate ABSL_TARGET_CRYPTO to use standard [[gnu::target(...)]] syntax where available\n\nPiperOrigin-RevId: 996572881\nChange-Id: I755ae3da1e5c655aae219fcaba14d7beaa06d428\n"
    },
    {
      "commit": "ef2fc625b473701dc9fa67661fdac37ebbb3e2d8",
      "tree": "dadf516cd964ca6ec637055fcb5de7bcc1db3e13",
      "parents": [
        "37f69fa448d5c2a291a6575054b90cae6dddf798"
      ],
      "author": {
        "name": "Taylor Cramer",
        "email": "cramertj@google.com",
        "time": "Thu Oct 08 17:30:42 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 08 17:32:10 2026 -0700"
      },
      "message": "Add payloads() accessor to StatusRep and include \u003coptional\u003e in status.cc.\n\nPiperOrigin-RevId: 996172950\nChange-Id: I40a4772c56214b00a3cb7a6885ad5f2389d98a05\n"
    },
    {
      "commit": "37f69fa448d5c2a291a6575054b90cae6dddf798",
      "tree": "f096b949840b536d5644bbed7597ba37f8375352",
      "parents": [
        "a0887650aff6d3a7e0fc004643ccccc94e8798df"
      ],
      "author": {
        "name": "Taylor Cramer",
        "email": "cramertj@google.com",
        "time": "Thu Oct 08 16:28:54 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 08 16:29:42 2026 -0700"
      },
      "message": "Include cord.h directly from status.cc.\n\nPiperOrigin-RevId: 996142337\nChange-Id: Ica4648fb402f3c3b0dad75cdcc5ec5689db1b27d\n"
    },
    {
      "commit": "a0887650aff6d3a7e0fc004643ccccc94e8798df",
      "tree": "6af2002fee7a8116d7529bbe39af90b79a207dac",
      "parents": [
        "f15716e2a34b7a11ccabbd03301e7de2ed7e9ea3"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Thu Oct 08 12:15:51 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Thu Oct 08 12:17:49 2026 -0700"
      },
      "message": "Use ABSL_BAD_CALL_IF() instead of __attribute__((enable_if(...))) in more places\n\nPiperOrigin-RevId: 995992863\nChange-Id: I9174f8b32d05581878b593eb94758fd249dcd9c1\n"
    },
    {
      "commit": "f15716e2a34b7a11ccabbd03301e7de2ed7e9ea3",
      "tree": "4a16894d0536166d6d555b6f11ac9dbb16f1bacc",
      "parents": [
        "dc960a419eaab4a7727e6bba304bb5c2be0b58c8"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 20:55:26 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 20:56:13 2026 -0700"
      },
      "message": "Migrate ABSL_SCOPED_LOCKABLE to [[clang::scoped_lockable]]\n\nPiperOrigin-RevId: 995543358\nChange-Id: I567fdbd655228f602767dcd14e603ff5049f06fe\n"
    },
    {
      "commit": "dc960a419eaab4a7727e6bba304bb5c2be0b58c8",
      "tree": "ae02dd0ba10ff5b6e860c1509f87587f88fd1cb0",
      "parents": [
        "39ab2c26848ed1a698563380b8b2fb0e97c8f99a"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 18:16:15 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 18:17:17 2026 -0700"
      },
      "message": "Add support for temporary spans in absl::c_sort and absl::c_stable_sort.\n\nPiperOrigin-RevId: 995481340\nChange-Id: I8fd2902823a6d4994dcb8823bf5685a5cf4039b0\n"
    },
    {
      "commit": "39ab2c26848ed1a698563380b8b2fb0e97c8f99a",
      "tree": "85fd4f4d2740781a64f8ff6e32ce7ff3839e4363",
      "parents": [
        "8578d02f1f700611dc343451bbf828c786615b2d"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 17:07:09 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 17:07:53 2026 -0700"
      },
      "message": "Tune CRC32C dispatch for AMD Zen 2-5; detect AMD Zen 6.\n\nPiperOrigin-RevId: 995450429\nChange-Id: Iede3695351b0a08413d25996d24bd96255a3c037\n"
    },
    {
      "commit": "8578d02f1f700611dc343451bbf828c786615b2d",
      "tree": "9c78d53069c21887f3de04c295deedaa350e9084",
      "parents": [
        "88fef12c2c3bb19d2e7715403fed4a1c2c43d405"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 13:28:58 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 13:31:47 2026 -0700"
      },
      "message": "Migrate ABSL_SCANF_ATTRIBUTE to [[gnu::format(...)]]\n\nPiperOrigin-RevId: 995318125\nChange-Id: Ib3df048553dc962387c15c5875ef6a05018b3609\n"
    },
    {
      "commit": "88fef12c2c3bb19d2e7715403fed4a1c2c43d405",
      "tree": "44252cc99f804dd955b540d50331ac2ad418ace9",
      "parents": [
        "c6ef1167c54599b7255cf318eec27dc501c731b7"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 13:28:22 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 13:29:26 2026 -0700"
      },
      "message": "Avoid using K* as a shorthand for \"K is not a reference\"\n\nPiperOrigin-RevId: 995317773\nChange-Id: Ic90d27751804e6e0620a8a25261ecd6f078a3f1a\n"
    },
    {
      "commit": "c6ef1167c54599b7255cf318eec27dc501c731b7",
      "tree": "c249a60234e288d338f8a759e04361c4f5101bf8",
      "parents": [
        "e8e992d6f6efbe10086741a6de34d719bbc98c1c"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 13:18:02 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 13:20:09 2026 -0700"
      },
      "message": "Remove #pragma clang diagnostic error \"-Wignored-attributes\" from ABSL_ATTRIBUTE_HOT and ABSL_ATTRIBUTE_COLD\n\nPiperOrigin-RevId: 995311018\nChange-Id: I29883859dbb65375ad6d4a5225f335cacf0b359e\n"
    },
    {
      "commit": "e8e992d6f6efbe10086741a6de34d719bbc98c1c",
      "tree": "cb1c44b5283ba805f468185a33bcec9741cb016f",
      "parents": [
        "dabf6ca1fbcc9ff51c9966c81ac58fe03ebfaa54"
      ],
      "author": {
        "name": "Connal de Souza",
        "email": "connaldesouza@google.com",
        "time": "Wed Oct 07 12:05:26 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 12:06:57 2026 -0700"
      },
      "message": "Limit the number of streams used for crc_memcpy.\n\nFewer streams perform better when copying is enabled in Extend, since with the extra loads and stores, we saturate the machine width with fewer streams. A GetStreamCounts function is added here so that we can derive the stream counts for copy mode from the same dynamic dispatch table\n\ngeomean speedup:\nSkylake     +7.08%\nMilan      +17.82%\nRome        +4.59%\nGenoa      +19.41%\nBroadwell    +0.8%\n\nArm platforms are neutral, since they already have \u003c\u003d 3 streams.\n\nPiperOrigin-RevId: 995265224\nChange-Id: I22535df60362eea2f7d002691bd0e30c6ffde301\n"
    },
    {
      "commit": "dabf6ca1fbcc9ff51c9966c81ac58fe03ebfaa54",
      "tree": "1839987d49ea80dfbee38b505ed6fea1239877c1",
      "parents": [
        "974e242bede7f94be23dec99d0c519156fc5267b"
      ],
      "author": {
        "name": "Abseil Team",
        "email": "absl-team@google.com",
        "time": "Wed Oct 07 09:46:30 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 09:47:47 2026 -0700"
      },
      "message": "Migrate ABSL_RANDOM_INTERNAL_ATTRIBUTE_NEVER_INLINE and ABSL_RANDOM_INTERNAL_ATTRIBUTE_ALWAYS_INLINE to ABSL_ATTRIBUTE_NOINLINE and ABSL_ATTRIBUTE_ALWAYS_INLINE\n\nPiperOrigin-RevId: 995170750\nChange-Id: I9e64d4f82e870aab19240efcc94f0058c6d47dec\n"
    },
    {
      "commit": "974e242bede7f94be23dec99d0c519156fc5267b",
      "tree": "6a5906e784837d70392b6084ed26a495fb10ae52",
      "parents": [
        "298a04d69cc2d8e30a78068454563fe492bbdfde"
      ],
      "author": {
        "name": "Ilya Biryukov",
        "email": "ibiryukov@google.com",
        "time": "Wed Oct 07 08:10:48 2026 -0700"
      },
      "committer": {
        "name": "Copybara-Service",
        "email": "copybara-worker@google.com",
        "time": "Wed Oct 07 08:11:40 2026 -0700"
      },
      "message": "Silence clang-diagnostic-pre-c++20-compat on ABSL_CONST_INIT\n\nWhen compiling in C++20 mode with `-Wc++17-compat-pedantic` enabled (or `-Wpre-c++20-compat` implied by it), ClangTidy warns on each use of `VLOG` and other macros that transitively expand `ABSL_CONST_INIT`.\n\nPiperOrigin-RevId: 995116569\nChange-Id: Ic5b973b4f49c76261006935282a16eae42dcc78d\n"
    }
  ],
  "next": "298a04d69cc2d8e30a78068454563fe492bbdfde"
}
