)]}'
{
  "commit": "b96d2a55a08943af1de2914a59fb88fe0acbb897",
  "tree": "c1c03b73d667e4fda8b4067f53ddbe0578693e6d",
  "parents": [
    "23bbb39bb490e4f1289516a103237ed27be54ddd"
  ],
  "author": {
    "name": "Madeline Kalil",
    "email": "mkalil@google.com",
    "time": "Fri Jul 17 14:45:07 2026 -0400"
  },
  "committer": {
    "name": "Madeline Kalil",
    "email": "mkalil@google.com",
    "time": "Wed Jul 22 06:41:54 2026 -0700"
  },
  "message": "go/analysis/passes/modernize: slicesbackward - skip if s[i] is mutated\n\nIn the slicesbackward modernizer, we replace backward loops over\nslices with a call to slices.Backward. However, if the index\nexpression s[i] is address-taken or mutated within the loop,\nwe should not offer this fix. For example:\n\nfor i :\u003d len(s) - 1; i \u003e 0; i-- {\n  s[i].n \u003d 5\n}\n\nfor _, v :\u003d range slices.Backward(s) {\n  v.n \u003d 5\n}\n\nv is a local copy, so the original s will not get mutated.\nTo avoid changing the program behavior, we should\nnot suggest a modernization.\n\nPromote a new function IsAssignedOrAddressTaken that replaces the uses\nof isScalarLValue in modernizers and isLValueUse\nin the inliner and add tests for it.\n\nFixes golang/go#80410\n\nChange-Id: I873afe8965dee39994547e16f284ca80541334d6\nReviewed-on: https://go-review.googlesource.com/c/tools/+/802260\nLUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: Alan Donovan \u003cadonovan@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9fd8657581ddd0b62c74c522d8038974906202a9",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/minmax.go",
      "new_id": "4b7b9d7c39b44bcf140f4d5ef467571e84a41450",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/minmax.go"
    },
    {
      "type": "modify",
      "old_id": "755c0d64c7f9d73e403b9da06ebeb764d7a6dfc7",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/modernize.go",
      "new_id": "2231abf92b136bfa757ede8d0818160d500e9114",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/modernize.go"
    },
    {
      "type": "modify",
      "old_id": "f7cb965f366aeacfe94f239c0dd6c18c29f3f10f",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/rangeint.go",
      "new_id": "b96d9781b750781535d7d6476f99de07e86f33b4",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/rangeint.go"
    },
    {
      "type": "modify",
      "old_id": "02cd30a25809e4e9631ca68c00fbe026fa73b37e",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/slicesbackward.go",
      "new_id": "7aa442039621bbc0126002f239da1b937fa9804e",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/slicesbackward.go"
    },
    {
      "type": "modify",
      "old_id": "07e95fb6e18197ff88283f8d229c00cb4759c1bb",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/stringscut.go",
      "new_id": "419f766a0e3e0ece7e2c8f53c81d0d914fe903a7",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/stringscut.go"
    },
    {
      "type": "modify",
      "old_id": "d3ea1e957f2ca1a0b0282c5385ae7ed7b0e46e97",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/testdata/src/rangeint/rangeint.go",
      "new_id": "4f418139df79c54d3e8d145436074455c4e3be0a",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/testdata/src/rangeint/rangeint.go"
    },
    {
      "type": "modify",
      "old_id": "f85e986e97b1fa97d694fe1132089a9a5c977eac",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/testdata/src/rangeint/rangeint.go.golden",
      "new_id": "7cc05a9a770da1e1773e480345e670d14640d750",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/testdata/src/rangeint/rangeint.go.golden"
    },
    {
      "type": "modify",
      "old_id": "fe3fc25f9a4fc31ab431162d6251a12140f21b3e",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/testdata/src/slicesbackward/slicesbackward.go",
      "new_id": "9e026fe4b2434b225e5849c5d4aa95520f268a78",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/testdata/src/slicesbackward/slicesbackward.go"
    },
    {
      "type": "modify",
      "old_id": "e3fb8928ede677bd940a1d4b329837d1f090a96c",
      "old_mode": 33188,
      "old_path": "go/analysis/passes/modernize/testdata/src/slicesbackward/slicesbackward.go.golden",
      "new_id": "1db10b1aec406c39de594df0d0a4d9a1291279dd",
      "new_mode": 33188,
      "new_path": "go/analysis/passes/modernize/testdata/src/slicesbackward/slicesbackward.go.golden"
    },
    {
      "type": "modify",
      "old_id": "d88bce2757f95988dc90c3b84f42a4d498df9b7b",
      "old_mode": 33188,
      "old_path": "gopls/internal/golang/inline.go",
      "new_id": "dff9cefd4d343e7a3909edd76e33b6db309eaf4f",
      "new_mode": 33188,
      "new_path": "gopls/internal/golang/inline.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "020defc38396602edf7d3647c8480633e02b79d6",
      "new_mode": 33188,
      "new_path": "internal/typesinternal/assignedaddress.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c2f2dda3ff89c544dda6f7b613a53db4ed340393",
      "new_mode": 33188,
      "new_path": "internal/typesinternal/assignedaddress_test.go"
    }
  ]
}
