)]}'
{
  "commit": "bbfbb2531cdf32fb65b8e3754e440f687df00767",
  "tree": "8962f975410a71c6aad96b34242c37b2b0de0740",
  "parents": [
    "a57023617dbcba31727211d312cec8835602894a"
  ],
  "author": {
    "name": "Thomas Lively",
    "email": "tlively@google.com",
    "time": "Wed Jul 29 20:57:16 2026"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jul 29 20:57:16 2026"
  },
  "message": "Fix unreachable br_on_cast parse bug (#8948)\n\nThe br_on_cast* family of instructions take input and output type\nimmediates. We do not store the input type in the IR, so IRBuilder has\nto check the type of the `ref` operand against the input type before the\ninput type is lost. For br_on_cast_desc_eq{_fail} instructions with\nunreachable descriptor operands, we had a bug that would allow us to pop\na `ref` operand with an incorrect type, which would then immediately\nfail that type check. This was incorrect because the unreachable `desc`\noperand should have created a polymorphic stack that allowed popping any\nvalid type. Fix the bug by threading the expected input type through\nIRBuilder to ChildTyper, where we can note the proper type constraint on\nthe `ref` operand.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "148cb7219baa880bc2bb8e7594260f49636d83e4",
      "old_mode": 33188,
      "old_path": "src/ir/child-typer.h",
      "new_id": "2ecabfbf65ec916c7559684b8cb83fe536f746d5",
      "new_mode": 33188,
      "new_path": "src/ir/child-typer.h"
    },
    {
      "type": "modify",
      "old_id": "c873bef76533aa399ec72652cb634ea688cbca7f",
      "old_mode": 33188,
      "old_path": "src/parser/contexts.h",
      "new_id": "9602a17ce1fb6d7cd8ccae36a799e1fcbe774a28",
      "new_mode": 33188,
      "new_path": "src/parser/contexts.h"
    },
    {
      "type": "modify",
      "old_id": "ab81ba549a7869c640efd7c6263fe72cbc70ac7c",
      "old_mode": 33188,
      "old_path": "src/wasm-ir-builder.h",
      "new_id": "5998dc8742824fb2c3a28dea1013412a47d6b21b",
      "new_mode": 33188,
      "new_path": "src/wasm-ir-builder.h"
    },
    {
      "type": "modify",
      "old_id": "4e35d8ce0c36c639e88dc637f0848d4aaf72b275",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm-ir-builder.cpp",
      "new_id": "913f050e835f48410686fcc14ac90431159c08e1",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm-ir-builder.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "70613347acb453dad37f36dd45c02b050a35e9b3",
      "new_mode": 33188,
      "new_path": "test/lit/basic/unreachable-br-on-cast-desc.wast"
    }
  ]
}
