)]}'
{
  "commit": "a49ac8e0934ddc6fa2fb93dcd4c926e8aaf0c103",
  "tree": "dcff13c4f07fe9eb457aa32b73d120e12f36fc80",
  "parents": [
    "76a21a99b8c4a316cb3dc80619df73d24994e76a"
  ],
  "author": {
    "name": "Evan Brown CA",
    "email": "ezb@google.com",
    "time": "Sun Sep 27 17:48:49 2026 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Tue Oct 27 13:12:52 2026 -0700"
  },
  "message": "Annotate out-of-line large string hash functions as pure.\n\n`CombineLargeContiguousImplOn32BitLengthGt8` and `CombineLargeContiguousImplOn64BitLengthGt32` only read `len` bytes starting at `first` and return a 64-bit hash state without modifying any memory or observable program state. However, because `first` is passed into an out-of-line call, the compiler must conservatively assume that the call could alias and clobber heap or stack memory reachable from `first`—including the `std::string` key or SwissTable header fields when a short-string buffer address is passed.\n\nMark both declarations with `ABSL_ATTRIBUTE_PURE_FUNCTION` (`__attribute__((pure))`) so the optimizer knows the out-of-line large buffer hash does not mutate memory. When hashing a contiguous key (`std::string`, `absl::string_view`, `std::vector`, `absl::Span`, etc.) in a SwissTable lookup, the compiler can keep the table\u0027s `common()` fields and the key\u0027s data pointer and length live across the cold `len \u003e 32` call rather than reloading them from memory before the probe loop.\n\nPiperOrigin-RevId: 989331761\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "025e57caad0d1f408c2412cb4c58f9fedb889825",
      "old_mode": 33188,
      "old_path": "absl/hash/internal/hash.h",
      "new_id": "c0d383347751867287422a9aac6e4b4ead2db556",
      "new_mode": 33188,
      "new_path": "absl/hash/internal/hash.h"
    }
  ]
}
