)]}'
{
  "commit": "dd2034e0b3d64c6fd5df99d8bbcc3041ab282a99",
  "tree": "440e0b665551647bdc161d93556699d7a3e3128a",
  "parents": [
    "1b6e6db02bb0650989da9fc121812333745de87b"
  ],
  "author": {
    "name": "William S. Moses",
    "email": "gh@wsmoses.com",
    "time": "Sun Sep 27 09:21:47 2026 -0500"
  },
  "committer": {
    "name": "William S. Moses",
    "email": "gh@wsmoses.com",
    "time": "Sun Sep 27 09:21:47 2026 -0500"
  },
  "message": "Zero the shadow of an untyped fresh allocation in the reverse sweep too\n\nA zeroing memset of an allocation whose element type TypeAnalysis cannot\ndetermine was assumed to hit never-written memory when the backwards walk\nlooking for a prior write reached the top of the memset\u0027s block. Inside a\nloop body that walk never reaches the alloca, so a scratch buffer\nre-zeroed on every iteration was treated as integer memory and its shadow\nwas only zeroed in the forward sweep. Adjoints accumulated into the\nshadow then leaked between reverse iterations (#3174).\n\nFollow unique predecessors in that walk and give up at a block with\nseveral predecessors, so the undef conclusion is only drawn when the\nallocation (or, for an sret, the function entry) is actually reached.\nWhen the fresh allocation may have been written, zero its shadow in both\nsweeps: the shadow of an alloca or malloc is created zeroed and never\ncarries a caller\u0027s seed, so the forward zeroing is harmless whatever the\ntype, and the reverse zeroing is what a float region needs since the\nmemset kills every prior value.\n\nCo-Authored-By: Claude Fable 5.1 \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01G84mmXoaait2MBqCH5BKNb\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9c4f42f91fc59502089b15a6deaa1c651223db28",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/AdjointGenerator.h",
      "new_id": "4738f21d17a3dd94714314dcdc8ed609032292d4",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/AdjointGenerator.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "85c60b4c8bee963b55be0bb3029ef70283530e07",
      "new_mode": 33188,
      "new_path": "enzyme/test/Enzyme/ReverseMode/memset-unknown-loop-eval.ll"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a25482e7d8783ddd01c8ac27eaef93f87f1e878e",
      "new_mode": 33188,
      "new_path": "enzyme/test/Enzyme/ReverseMode/memset-unknown-loop.ll"
    }
  ]
}
