)]}'
{
  "commit": "e150ca9c9aba9b8d8e61d0953ea4b90deef620bc",
  "tree": "2a11976b2354d69db17584566f8fc29d308b6b41",
  "parents": [
    "ea3353b64c04a12a284fba10f6927e970849a33a"
  ],
  "author": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Fri Mar 28 11:30:02 2014 -0400"
  },
  "committer": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Fri Mar 28 11:30:02 2014 -0400"
  },
  "message": "cmd/gc: never pass ptr to uninit temp to runtime\n\nchanrecv now expects a pointer to the data to be filled in.\nmapiterinit expects a pointer to the hash iterator to be filled in.\nIn both cases, the temporary being pointed at changes from\ndead to alive during the call. In order to make sure it is\npreserved if a garbage collection happens after that transition\nbut before the call returns, the temp must be marked as live\nduring the entire call.\n\nBut if it is live during the entire call, it needs to be safe for\nthe garbage collector to scan at the beginning of the call,\nbefore the new data has been filled in. Therefore, it must be\nzeroed by the caller, before the call. Do that.\n\nMy previous attempt waited to mark it live until after the\ncall returned, but that\u0027s unsafe (see first paragraph);\nundo that change in plive.c.\n\nThis makes powser2 pass again reliably.\n\nI looked at every call to temp in the compiler.\nThe vast majority are followed immediately by an\ninitialization of temp, so those are fine.\nThe only ones that needed changing were the ones\nwhere the next operation is to pass the address of\nthe temp to a function call, and there aren\u0027t too many.\n\nMaps are exempted from this because mapaccess\nreturns a pointer to the data and lets the caller make\nthe copy.\n\nFixes many builds.\n\nTBR\u003dkhr\nCC\u003dgolang-codereviews\nhttps://golang.org/cl/80700046\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "55bdee2418dba0579a31d60cfff3babcaa1c8f62",
      "old_mode": 33188,
      "old_path": "src/cmd/gc/plive.c",
      "new_id": "fb2b2fdaf6d23c22fb90c839f7b7abb8b779426e",
      "new_mode": 33188,
      "new_path": "src/cmd/gc/plive.c"
    },
    {
      "type": "modify",
      "old_id": "cfe713c1307fe602778750d43b5dfe2757673184",
      "old_mode": 33188,
      "old_path": "src/cmd/gc/range.c",
      "new_id": "33a45fe5cfe25d8d56cc961dcc4df0d3c3b45522",
      "new_mode": 33188,
      "new_path": "src/cmd/gc/range.c"
    },
    {
      "type": "modify",
      "old_id": "d3c04c659e4ec73150fe560bcdee37f098957116",
      "old_mode": 33188,
      "old_path": "src/cmd/gc/select.c",
      "new_id": "48066c2e7fecf0bb53dbad736f7f8ad06407fbab",
      "new_mode": 33188,
      "new_path": "src/cmd/gc/select.c"
    },
    {
      "type": "modify",
      "old_id": "91e87192a4484b3388f915337765d024c0d08295",
      "old_mode": 33188,
      "old_path": "src/cmd/gc/walk.c",
      "new_id": "4416c87b083ed6668c146ef35e85cd9b3ff51169",
      "new_mode": 33188,
      "new_path": "src/cmd/gc/walk.c"
    }
  ]
}
