)]}'
{
  "commit": "342b495301bbd8b75c2721212a08ce41e3f82265",
  "tree": "6fce352fb0c644e25a3360f709b8f3a3da69f103",
  "parents": [
    "e25a5ce120673835a7e6c92bf0d88f44a61e9079"
  ],
  "author": {
    "name": "Michael Pratt",
    "email": "mpratt@google.com",
    "time": "Fri Feb 25 14:21:25 2022 -0500"
  },
  "committer": {
    "name": "Michael Pratt",
    "email": "mpratt@google.com",
    "time": "Thu Apr 21 18:06:38 2022 +0000"
  },
  "message": "cmd/compile: add //go:uintptrkeepalive\n\nThis CL exports the existing ir.UintptrKeepAlive via the new directive\n//go:uintptrkeepalive. This makes the compiler insert KeepAlives for\npointers converted to uintptr in calls, keeping them alive for the\nduration of the call.\n\n//go:uintptrkeepalive requires //go:nosplit, as stack growth can\u0027t\nhandle these arguments (it cannot know which are pointers). We currently\ncheck this on the immediate function, but the actual restriction applies\nto all transitive calls.\n\nThe existing //go:uintptrescapes is an extension of\n//go:uintptrkeepalive which forces pointers to escape to the heap, thus\neliminating the stack growth issue.\n\nThis pragma is limited to the standard library.\n\nFor #51087\n\nChange-Id: If9a19d484d3561b4219e5539b70c11a3cc09391e\nReviewed-on: https://go-review.googlesource.com/c/go/+/388095\nRun-TryBot: Michael Pratt \u003cmpratt@google.com\u003e\nReviewed-by: Matthew Dempsky \u003cmdempsky@google.com\u003e\nTryBot-Result: Gopher Robot \u003cgobot@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ef7fa86749f0137d03c949a08dcf504cb58bb56f",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/doc.go",
      "new_id": "b8862f62cf11739b0cba9a087a2192eddb8eb277",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/doc.go"
    },
    {
      "type": "modify",
      "old_id": "4408a531eca5fa2f65d6b9cd5b5dd8a57dffed17",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/escape/escape.go",
      "new_id": "05fbe58bbc9c7ce47637172f1334ab1e14262a03",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/escape/escape.go"
    },
    {
      "type": "modify",
      "old_id": "8c2ea49c8f46da86c4e53800b4ce77c35d6f17d4",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/inline/inl.go",
      "new_id": "486a6ad31923e449948bbd1ad38a879f46a41825",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/inline/inl.go"
    },
    {
      "type": "modify",
      "old_id": "9ccb8e3c30edb03220f32561a72dd22652cfa8b7",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/ir/node.go",
      "new_id": "0d91d1734416a61a15feeaf05875b4efd3cc444b",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/ir/node.go"
    },
    {
      "type": "modify",
      "old_id": "f985648c667b75f6c69fca3e2feaf4d12cbd6691",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/noder/decl.go",
      "new_id": "91a90d9e090c10b1d936d282366f243d7c4b2a9d",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/noder/decl.go"
    },
    {
      "type": "modify",
      "old_id": "66a56a50ec8ebcf2f1f63ecbfa545b0e64c7b37b",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/noder/lex.go",
      "new_id": "cef0f082ca9e04f9ce74eb1233e885d3dde1d960",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/noder/lex.go"
    },
    {
      "type": "modify",
      "old_id": "cc5610acda911f6da36f6326732975514da2332e",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/noder/noder.go",
      "new_id": "9a42b5afd1734dfccaef061777964c3bdc836b59",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/noder/noder.go"
    },
    {
      "type": "modify",
      "old_id": "c5c346b784216f061d64c3a1af51310576b3a88d",
      "old_mode": 33188,
      "old_path": "src/cmd/compile/internal/noder/writer.go",
      "new_id": "0fb162d381b97919f5a733ba14e79f5904166cc2",
      "new_mode": 33188,
      "new_path": "src/cmd/compile/internal/noder/writer.go"
    },
    {
      "type": "modify",
      "old_id": "fbf22eeb4422498a994efedd54a3a5ce3d8ce4b6",
      "old_mode": 33188,
      "old_path": "src/runtime/HACKING.md",
      "new_id": "61755241c513211b5f7ddd1eb93fc97b7fa1e7b1",
      "new_mode": 33188,
      "new_path": "src/runtime/HACKING.md"
    },
    {
      "type": "modify",
      "old_id": "b920ff68aabbd96b37a0e8f07f23c3bdaf452c73",
      "old_mode": 33188,
      "old_path": "test/live_uintptrkeepalive.go",
      "new_id": "10c4c7505b49f20f02badbf0bb2a66106451a3ef",
      "new_mode": 33188,
      "new_path": "test/live_uintptrkeepalive.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "97834dcd1af5478e62e4ab34c04e23da9366973b",
      "new_mode": 33188,
      "new_path": "test/uintptrkeepalive.go"
    }
  ]
}
