)]}'
{
  "commit": "0a01f7f39cc5c11b98c36914ef1fae24165ac550",
  "tree": "39272377dedf2ed17f7ca6df37133afd558b255b",
  "parents": [
    "a631c1445ced72a905b3303b26f148fc706647dd"
  ],
  "author": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Fri Oct 16 21:34:17 2026"
  },
  "committer": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Fri Oct 16 21:39:42 2026"
  },
  "message": "[Heap2Local] Handle newly unreachable refs in cmpxchg and cast_desc_eq\n\n`Struct2Local` rewrites expressions in a post-order walk while deferring `ReFinalize` until the end of the function walk. When an unescaping allocation flows into both a failing cast inside the `ref` operand of a `struct.atomic.rmw.cmpxchg`, `array.atomic.rmw.cmpxchg`, or nullable `ref.cast_desc_eq` and into its `expected` or `desc` operand, the inner cast is replaced with an unreachable block before the parent expression is visited. Because `ReFinalize` has not run yet, the parent\u0027s `curr-\u003etype` remains concrete while `curr-\u003eref-\u003etype` is now `Type::unreachable`, causing `curr-\u003eref-\u003etype.with(Nullable)` or `builder.addVar(func, curr-\u003eref-\u003etype)` to fail assertions or produce invalid IR. Check for `curr-\u003eref-\u003etype \u003d\u003d Type::unreachable` in `visitStructCmpxchg`, `visitArrayCmpxchg`, and `visitRefCast`.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7f8381e2a6cc6a61e80b1c92e3f47f1ae6a398a9",
      "old_mode": 33188,
      "old_path": "src/passes/Heap2Local.cpp",
      "new_id": "78d643e75ff6c5d021268592440e34993b0a71bf",
      "new_mode": 33188,
      "new_path": "src/passes/Heap2Local.cpp"
    },
    {
      "type": "modify",
      "old_id": "4691485216a2e2c2e36063a8edabead791516bfc",
      "old_mode": 33188,
      "old_path": "test/lit/passes/heap2local-desc.wast",
      "new_id": "0c1288c3f1450904c9f1104ab584eedf92ca7a31",
      "new_mode": 33188,
      "new_path": "test/lit/passes/heap2local-desc.wast"
    },
    {
      "type": "modify",
      "old_id": "07fc1eadac1079ff9398d8088ce40f0081fff147",
      "old_mode": 33188,
      "old_path": "test/lit/passes/heap2local-rmw.wast",
      "new_id": "4499b1e9bf982be537bfb63e8e42922fb120e268",
      "new_mode": 33188,
      "new_path": "test/lit/passes/heap2local-rmw.wast"
    }
  ]
}
