)]}'
{
  "commit": "3587b69039b76cd87b32445f87d613dfd02cd930",
  "tree": "79744b91079d7b98d123d86d311b85444f8e8942",
  "parents": [
    "ab0bd5b88e8c0d632a90ac68edb7225b3fdfaa11"
  ],
  "author": {
    "name": "William Moses",
    "email": "gh@wsmoses.com",
    "time": "Sun Aug 09 12:54:28 2026 -0500"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sun Aug 09 12:54:28 2026 -0500"
  },
  "message": "ReverseRetOpt: bail on ops whose outputs do not line up with their activities (#3118)\n\nenzyme.autodiff has no verifier relating its result count to its activity\nattributes, so a canonicalization pattern can meet an op whose ranges do\nnot line up -- the shape a __enzyme_autodiff call raises to when the\nreturn is mis-said as enzyme_active rather than enzyme_activenoneed\nsegfaulted ReverseRetOpt walking getOutputs()/getInputs() past their\nends, on as little as differentiating square(x) \u003d x*x. Bounds-check the\nindexed reads and return failure, leaving the op for the AD pass to\ndiagnose.\n\n\nClaude-Session: https://claude.ai/code/session_016zErYp7upmqr4NHfhod9UD\n\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3549f65b5e3e1fa80155fa3475132a0723122447",
      "old_mode": 33188,
      "old_path": "enzyme/Enzyme/MLIR/Dialect/Ops.cpp",
      "new_id": "9d99c0f238d0d2a2cfa519b22838b298d3ad5268",
      "new_mode": 33188,
      "new_path": "enzyme/Enzyme/MLIR/Dialect/Ops.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "030f6fa1c9a369eac81a9d8d06b84c369f0d00b8",
      "new_mode": 33188,
      "new_path": "enzyme/test/MLIR/Passes/reverseretopt_inconsistent.mlir"
    }
  ]
}
