)]}'
{
  "log": [
    {
      "commit": "97f505721a2d73cdfe18a24e7c15c50a1e83c8d9",
      "tree": "adc3b91d10cd547ad1231e082625ecdc6a37ced7",
      "parents": [
        "3b7895917ee0086f03627ad191303b9a5f5211b5"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jun 17 02:09:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 02:09:49 2026"
      },
      "message": "NFC: Fix comment/code match in relaxed atomics spec test (#8846)\n\nThe comment said i32.const 51 / i64.const 51 while the code had 0. Use 0\nfor memory addresses and 51 (33 in hex) for values."
    },
    {
      "commit": "3b7895917ee0086f03627ad191303b9a5f5211b5",
      "tree": "ed8f3fe3008d708b10328ed127fa73ab112c484c",
      "parents": [
        "dbfd4e7d0c13715ca49ff6fab6553e7dcf7ee5a4"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Jun 17 01:26:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 01:26:29 2026"
      },
      "message": "[wasm-split] Split active segments (part 1) (#8840)\n\nThis removes the assumption that all segments should be pinned to the\nprimary module. This first checks memory and table usage, and if a\nmemory/table is exclusively used in a secondary module, moves active\ndata / elem segments that reference the table to that secondary module.\n\nWe check whether a segment can trap, and if so, we pin it to the primary\nbecause they should be evaluated at the primary instantiation time.\n\nWhen a memory/table is used in multiple modules, it is suboptimal to\njust scan all segments of that memory/table and mark them as used in\nthose modules, because as in the case of #????, this can generate\nunnecessary exports. For example, if table $t is used both in the\nprimary and the secondary, and elem $e is like\n```wast\n(elem $e (table $t) (i32.const 0) ... (global.get $g))\n```\nbecause $e will stay in the primary module, the secondary module is not\ngoing to see $g, so it should NOT be exported and imported. This PR\nfigures out a single owner module for each memory/table, and marks\nsegments as \"used\" there.\n\nThis does not currently reduces the size of primary modules of\nacx_gallery and essentials because every table is exported, so there is\nno tables exclusively used by a secondary. This may change when we\nremove internal exports."
    },
    {
      "commit": "dbfd4e7d0c13715ca49ff6fab6553e7dcf7ee5a4",
      "tree": "380955142363ccc4a866a64e9eff20a8af6947f2",
      "parents": [
        "c0434088ef105ab4435c0ceb2a0649b09101f98a"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Jun 17 00:45:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 00:45:33 2026"
      },
      "message": "[wasm-split] Remove example tests (#8851)\n\nThese are hard to maintain, and we have enough coverage in\n`test/lit/wasm-split`."
    },
    {
      "commit": "c0434088ef105ab4435c0ceb2a0649b09101f98a",
      "tree": "aa6e66a4e4214f4089a83171d73fd9e2b580982a",
      "parents": [
        "914b5038aff10284803892e6fe9a5bc3ecfe85c7"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Jun 16 22:57:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 22:57:40 2026"
      },
      "message": "GUFA: Root public function results in open-world (#8847)\n\nIn open-world mode, assume that public function types might have\narbitrary implementations not visible inside the module. These arbitrary\nimplementations will return arbitrary values of the appropriate type, so\ntreat the return positions of these function types as roots for the GUFA\nanalysis.\n\nFixes #8841."
    },
    {
      "commit": "914b5038aff10284803892e6fe9a5bc3ecfe85c7",
      "tree": "eb706888b03f23ecf40cd7b54ae5d21b38d175da",
      "parents": [
        "c99f5983ea4d418f8772e70c165d997662b7e920"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 16 21:40:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 21:40:42 2026"
      },
      "message": "TypeSSA: Handle table initial values (#8842)\n\nYet another pass that did not look at table initial values (like #8838)"
    },
    {
      "commit": "c99f5983ea4d418f8772e70c165d997662b7e920",
      "tree": "7de5a7680c1b85499735aab45e0ba4d2df9e4606",
      "parents": [
        "1312bcb554cd00ce101bd75d08a008611c7784be"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 16 18:22:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 18:22:00 2026"
      },
      "message": "RemoveUnusedModuleElements: Handle table initial values trapping (#8843)\n\nSimilar to #8838, but handles a subtle issue with trapping: when a table\nhas an initial value, we must not remove elem segments whose functions\ntrap, as they may be necessary to generate a trap."
    },
    {
      "commit": "1312bcb554cd00ce101bd75d08a008611c7784be",
      "tree": "0d6e026e52cfbdc786bd079bbe13200556dd468a",
      "parents": [
        "389d044823b9b1333a0c501ab63ba4db2f533b60"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 16 18:21:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 18:21:25 2026"
      },
      "message": "Directize: Handle table initial values (#8839)\n\nThis is a little more tricky than RemoveUnusedModuleElements (#8838):\nNow we must take into account the table size and whether it is imported.\nThat is, if a table has an initial value, it will be used instead of a null when\nthere is no other value, and we need to know that initial value in order to optimize\n(but for an imported table etc., we don\u0027t)."
    },
    {
      "commit": "389d044823b9b1333a0c501ab63ba4db2f533b60",
      "tree": "26864aad4575baf63b12cac1e7169c0bf81ade0c",
      "parents": [
        "f10552d7e468c67b2647d94a21c27ae0aed7f3ad"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Jun 16 00:42:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 00:42:33 2026"
      },
      "message": "[wasm-split] Remove unnecessary global exports (#8832)\n\nGlobals and tables can have initializers that can contain other globals.\nCurrently we just scan them as uses. For example, if global $g is used\nboth in the primary and the secondary and its initializer is\n`(global.get $h)`, $h is also marked as \"used\" in both modules.\n\nBut currently we only move a module item to a secondary module only when\nthat item is exclusively used by that module. So if a global is used in\nthe primary and the secondary, it will stay in the primary and then be\nexported to the secondary.\n\nBut in the current code, becaus $g is marked as used in both modules and\nits initializer will be walked in both modules, $h is also marked as\nused in both modules. Becuase $g doesn\u0027t move to the secondary and only\nis imported there, the secondary doesn\u0027t need $h. But because it is\nmarked as \"used\", the secondary module imports $h unnecessarily. The\nmulti-split case is similar.\n\nThe case is the same for table initiaializers. The difference between\nthe two is global initializers can contain another global, so we need a\nworklist to compute the transitive closure.\n\nThis fixes it by figuring out who the \"owner\" is for each global and\ntable, and mark it \"used\" in a secondary module only when that is the\nsole user. Otherwise it will be marked as \"used\" in the primary.\n\nThis does not meaningfully change computation time and reduces the\nprimary module size around 0.3% for new acx_gallery and essentials and\n1% for old acx_gallery."
    },
    {
      "commit": "f10552d7e468c67b2647d94a21c27ae0aed7f3ad",
      "tree": "7e10ed429a14e889c025c747f1bb950be3fa58db",
      "parents": [
        "988db58199cd3f57a348c779779a3f6174aae083"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 15 23:31:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 23:31:35 2026"
      },
      "message": "RemoveUnusedModuleElements: Handle table initial values (#8838)\n\nThe initial value is callable."
    },
    {
      "commit": "988db58199cd3f57a348c779779a3f6174aae083",
      "tree": "ed15c4b90ce028b6797a530032fd6406424045c7",
      "parents": [
        "8b4abbe3d38c59cd3d6b7363bc7d67276e45e867"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Jun 15 21:15:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 21:15:13 2026"
      },
      "message": "Reapply \"Fix open world public types\" (#8802) (#8810)\n\nThis reverts commit 9e3b947bef886553fa9e7da6d683110d60d91f54.\n\nBeyond reapplying the original commit, this adds special handling when\n`func` is exposed so that function types used only to declare\nunreferenced functions or for control flow are not considered public.\nType identity does not matter and does not need to be preserved in these\ncases. This avoids an assertion failure in MinimizeRecGroups when\ncontrol flow types or unreferenced function types differ from public\ntypes only in exactness when custom descriptors is disabled. This can\nhappen as a result of optimizations such as DAE, which are free to\nchange the types of unreferenced functions.\n\nFixes #8718, #8798, #8799."
    },
    {
      "commit": "8b4abbe3d38c59cd3d6b7363bc7d67276e45e867",
      "tree": "485937ce71d6d0d2d388882e01dac0287aca3979",
      "parents": [
        "c21e492f25838b844ec1c0e756698e6be82680d4"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jun 12 23:06:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 23:06:07 2026"
      },
      "message": "Fix sed commands in create_release.yml (#8837)\n\nI broke this with #8721. This change makes it harder to break going\nforward."
    },
    {
      "commit": "c21e492f25838b844ec1c0e756698e6be82680d4",
      "tree": "12eeef1ace3427a5658236a7ddc429ce5b2dcd0f",
      "parents": [
        "d0b9c033808fc85640a240819d74f8347b769155"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jun 12 17:57:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 17:57:10 2026"
      },
      "message": "wasm-merge: When fixing name collisions, do not collide in either module (#8836)\n\nWhen a name `$a` appears in both modules, we picked a new name not in\nthe first module. But if the new name, something like `$a_1`, is in the\nsecond module, that is also a problem: we will get mixed up about what\nin the second module is what. To avoid this, when handling a name\ncollision, just pick a totally novel name.\n\nFixes #8835"
    },
    {
      "commit": "d0b9c033808fc85640a240819d74f8347b769155",
      "tree": "6ec9183c43b51e509510d5ee50dd306bc912c44d",
      "parents": [
        "193792f6e900b36603b300266e4481c30bc0a31e"
      ],
      "author": {
        "name": "Jacky Li",
        "email": "86073892+JPL11@users.noreply.github.com",
        "time": "Fri Jun 12 17:47:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 17:47:50 2026"
      },
      "message": "MemoryPacking: Optimize trampled data instead of giving up (#8834)\n\n## What does this PR do?\n\nWhen active segments overlap, a later segment overwrites (\"tramples\")\nthe data of an earlier one. #3222 made MemoryPacking check for trampling\nand give up optimizing on any overlap. Since active segments are applied\nin order during instantiation, before any code can run, only the final\ncontents of memory are observable — so instead of giving up, we can zero\nout all trampled bytes and let the pass\u0027s normal optimization of zeros\nremove them. This leaves segment count, offsets, and order untouched, so\nsegment referrers and trap behavior are unaffected.\n\nThe one case we still skip (with the existing warning) is an imported\nmemory: there, a later out-of-bounds segment traps mid-instantiation and\nthe partially-written state remains visible in the importing module,\nwhich outlives the failed instantiation, so even trampled data matters.\nA possible follow-up could optimize imported memories too when all\nsegments are provably within the declared minimum size.\n\n## Why was this PR needed?\n\n#3244 (filed after the conservative fix in #3222) left a `TODO: optimize\nin the trampling case` in `canOptimize()`. Before this change, a module\nlike\n\n```wat\n(module\n (memory $0 1 1)\n (data (i32.const 1024) \"x\")\n (data (i32.const 1024) \"\\00\")\n)\n```\n\nwas emitted entirely unchanged; now both segments are removed (the final\nmemory contents are all zeros).\n\n## Testing\n\n- Updated the existing trampling tests in\n`memory-packing_all-features.wast` and added cases for: full trampling\nby a non-zero byte, partial trampling in the middle of a segment,\nchained trampling, one segment trampling multiple earlier ones, passive\nsegments being unaffected, and the imported-memory case in\n`memory-packing_zero-filled-memory.wast`.\n- Full lit suite, `check.py`, and gtest unit tests pass.\n- Differential testing: `wasm-opt --fuzz-exec --memory-packing` on 300\nrandomly generated modules with 2–6 overlapping segments produces\nidentical memory contents before and after the pass.\n\nFixes #3244"
    },
    {
      "commit": "193792f6e900b36603b300266e4481c30bc0a31e",
      "tree": "47b82105695e7fea0e9e093d594f8c397919e689",
      "parents": [
        "c2a1cc8d19b601191f326e3bc749a9003fe354dd"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Jun 11 21:52:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 21:52:41 2026"
      },
      "message": "Fix type merging for unknown effects (#8833)\n\nFixes #8831. See the incorrect optimization described in that issue."
    },
    {
      "commit": "c2a1cc8d19b601191f326e3bc749a9003fe354dd",
      "tree": "53fff043523dd8deba7e99b49d2a017c899bece6",
      "parents": [
        "2fe6f0458eccdfaf2a0e292d723e066866a760e0"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu Jun 11 17:41:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 17:41:55 2026"
      },
      "message": "[wasm-split] Scan trapping globals\u0027 initailizer (#8830)\n\nThis basically reverts #8790, which had unforseen consequences. We\ndidn\u0027t scan trapping globals\u0027 initializer because computing transitive\nglobals happened before adding those trapping globals to the primary\nmodule."
    },
    {
      "commit": "2fe6f0458eccdfaf2a0e292d723e066866a760e0",
      "tree": "85589490fe732995a4ca7794bba16f7c32850cfa",
      "parents": [
        "7c5e27c9f1ebd86f81cb8ece6a2c46748e8a04da"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu Jun 11 01:02:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 01:02:40 2026"
      },
      "message": "[wasm-split] Take functions out of shareImportableItems (NFC) (#8829)\n\nThis takes `getUsedNames`, which got blown out of proportion, out of\n`shareImportableItems` and renames it to `scanModule`, and put it in a\nnew function `computeUsedNames`. This also takes some routines out of\n`scanModule` and put it in `computeUsedNames`.\n\nThe rationale is twofold:\n- `shareImportableItems` is too blown up and not easy to read.\n- Before I tried to do all things necessary to figure out where each\nmodule itesm is used within `getUsedNames` in order to make other things\ntidier, but this is just untenable going forward."
    },
    {
      "commit": "7c5e27c9f1ebd86f81cb8ece6a2c46748e8a04da",
      "tree": "f128385a079a40c6c83e90c87c992c4f1205ee2e",
      "parents": [
        "2e5bdfc693b183a8716845e4eb1e22eadf18f2ca"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jun 10 23:49:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 23:49:09 2026"
      },
      "message": "Add initial (binary only) support for compact imports proposal. NFC. (#8226)\n\nSee https://github.com/WebAssembly/compact-import-section\n\nThis change only adds binary support. Luckily the upstream tests are\ndevided in two seperate\nfiles `binary-compact-imports.wast` and `compact-imports.wast` so this\nchange only imports\none of them."
    },
    {
      "commit": "2e5bdfc693b183a8716845e4eb1e22eadf18f2ca",
      "tree": "90169bdbada8f135b8043b69ca9bcf50d35e3c68",
      "parents": [
        "f143d6652f8d6dd3b5a45ef49e36528115516633"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Jun 10 22:57:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 22:57:17 2026"
      },
      "message": "[wasm-split] Support Table::init (#8818)\n\nThis adds support for `Table::init` expressions."
    },
    {
      "commit": "f143d6652f8d6dd3b5a45ef49e36528115516633",
      "tree": "8c9d05253167c8b32a6ed80150d829201fa66b0f",
      "parents": [
        "e013264c0b62b6ec7862ec09c9ffdf81916b1427"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Wed Jun 10 21:17:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 21:17:09 2026"
      },
      "message": "Refactor WasmBinaryReader::readImports to use helper methods. NFC. (#8825)\n\nThis change is in preparation for compact imports in #8226."
    },
    {
      "commit": "e013264c0b62b6ec7862ec09c9ffdf81916b1427",
      "tree": "74c75aa3ca252f3b020c1a034d1fda9ff750015f",
      "parents": [
        "62c74d726922079d4e4aba4d00b4e6979c3c00f2"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jun 10 17:57:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 17:57:23 2026"
      },
      "message": "Fix effects for inexactly imported functions (#8823)\n\nFollowup to\nhttps://github.com/WebAssembly/binaryen/pull/8807#pullrequestreview-4440513943.\nWhen a function is imported inexactly, it may be downcasted to any of\nits subtypes. So a call_ref to $sub needs to include effects from an\nimport of type $super. This isn\u0027t needed for ref.func on a defined\n(non-imported) function because we know its exact type in that case, and\nditto for exact imports.\n\nPart of #8615."
    },
    {
      "commit": "62c74d726922079d4e4aba4d00b4e6979c3c00f2",
      "tree": "17d347e5384f527003191eacb8b6008511308e66",
      "parents": [
        "3c25487214600a965e6d5134252efc55b7980000"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jun 10 00:01:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 00:01:00 2026"
      },
      "message": "NFC: Take a `const Module` for `iter...` functions (#8822)\n\nEven if the visitor takes a mutable pointer param e.g. `Function*`, it\nstill works since the pointers aren\u0027t a member of a the `Module` itself\nbut stored in a separate unique_ptr.\n\nAlso use a forwarding reference for `visitor` to avoid copies.\n\nFor use in #8823."
    },
    {
      "commit": "3c25487214600a965e6d5134252efc55b7980000",
      "tree": "e174aa8c74a08dcbfe22bb4611390a8322fe220b",
      "parents": [
        "598d0b1577f97eb368091451b60ed9876b6f7e71"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 09 22:39:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 22:39:06 2026"
      },
      "message": "Intrinsics: Add @binaryen.inline, parallel to @metadata.code.inline (#8820)\n\nThe existing standardized annotation is for VMs. This annotation is for\ntoolchains.\n\nWe already have such annotations for never-inline, but not using an\nintrinsic, and also allowing partial-inlining to be set. This uses the\nmodern annotations framework for it. We can deprecate the old form after we\nadd a partial-inlining form in the modern way.\n\nFor reference the old forms are here:\n\nhttps://github.com/WebAssembly/binaryen/blob/598d0b1577f97eb368091451b60ed9876b6f7e71/src/wasm.h#L2474-L2477\n\nFixes #7972"
    },
    {
      "commit": "598d0b1577f97eb368091451b60ed9876b6f7e71",
      "tree": "4c177a6028f7eb28ae57a95f6ea166c23eeee1c4",
      "parents": [
        "2227ff02350ba741a73a3b29c7d9e7f9a2fb79c2"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Jun 09 18:45:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 18:45:44 2026"
      },
      "message": "NFC: Remove obsolete TODO (#8819)\n\nThe TODO is already resolved:\nhttps://github.com/WebAssembly/binaryen/pull/8807#issuecomment-4652950529."
    },
    {
      "commit": "2227ff02350ba741a73a3b29c7d9e7f9a2fb79c2",
      "tree": "6624081accb315657770d17a306b1d0fbdee585b",
      "parents": [
        "8ba5b2e6eb485574f7a86e942ce0ca0072fbe778"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Jun 09 15:28:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 15:28:54 2026"
      },
      "message": "Fix crash in optimizeSelect with non-concrete arm types (#8817)\n\nAvoid creating a scratch local of non-concrete type (like unreachable)\nwhen we cannot reorder. We generally do not optimize unreachable selects\nin the first place, but it is still possible that we observe unreachable\narms when optimizing because other optimizations might have made the\narms unreachable.\n\nTAG\u003dagy"
    },
    {
      "commit": "8ba5b2e6eb485574f7a86e942ce0ca0072fbe778",
      "tree": "91eb9888e5c951f9a8eec5c0791926ca4e184999",
      "parents": [
        "cacc71181118036bd677d937bd6fb5cfdc1bee4c"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Jun 08 23:36:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 23:36:26 2026"
      },
      "message": "[wasm-split] Move some code (NFC) (#8815)\n\nThis just moves some code to make future diff tidier. This makes\n`walkSegments` a lambda function within `shareImportableItems` because\nit is only used within that function, and this adds the dispatch table\nand segments to the primary\u0027s used list within `getUsedNames` rather\nthan outside."
    },
    {
      "commit": "cacc71181118036bd677d937bd6fb5cfdc1bee4c",
      "tree": "83469b1a35006168e824355881fb7c5d55e023b7",
      "parents": [
        "dfebc6a38c918f8fb7dd4aecf068a4a61c94fc7c"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 08 23:32:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 23:32:46 2026"
      },
      "message": "Add std::inplace_vector polyfill from c++26 [NFC] (#8814)\n\nHeader is basically our SmallVector, modified to remove the dynamic\nallocation."
    },
    {
      "commit": "dfebc6a38c918f8fb7dd4aecf068a4a61c94fc7c",
      "tree": "3a71ae9ddbf9be83f75f31cbb1d0286aba9cf02e",
      "parents": [
        "bfe40fa4c1f969e4014dd9e34105f7018541bbfc"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Mon Jun 08 21:41:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 21:41:36 2026"
      },
      "message": "[wasm-split] Remove unused module elements (#8813)\n\nWe currently just leave unused module items in the primary module,\nexcept for globals (#8505). This removes other unused module items too,\nbecause it is simpler for upcoming PRs.\n\nWe currently pin all segments in the primary module, but future PRs can\nchange that, in which case segments\u0027 usage can be dependent on tables,\nin which case unused tables can become tricky as in the case of globals.\nThis PR just removes all unused module items for simplicity. This\ndoesn\u0027t mean this runs a comprehensive fixed-point analysis like\nRemoveUnusedModuleElements pass; it just drops elements that are never\nreferenced anywhere in any modules when exporting them.\n\nUpdate some tests so that tables are \"used\" in not droped."
    },
    {
      "commit": "bfe40fa4c1f969e4014dd9e34105f7018541bbfc",
      "tree": "735c8de6f299161825b375e6d31ecc2eceef3ceb",
      "parents": [
        "06000bf0ee350cce1f14657a8978b0a88a35f408"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 08 21:00:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 21:00:31 2026"
      },
      "message": "GUFA: Fix string.encode (#8812)\n\nThis writes to an array. Without noticing the write, we might think it\ncontains the wrong thing."
    },
    {
      "commit": "06000bf0ee350cce1f14657a8978b0a88a35f408",
      "tree": "4209c0b49f75ac9f96e92eac00c185f0eae74d71",
      "parents": [
        "c800b9dd18ecaf8f11bc1382ad0f54d8b8f0f626"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Sat Jun 06 00:56:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 00:56:58 2026"
      },
      "message": "Use deep effects in areConsecutiveInputsEqual (#8808)\n\nAlthough it is true that side effects in the children of the LHS input\naffect both the LHS and RHS inputs equally, we did not properly account\nfor the fact that the same effects are executed again as part of the RHS\nand can change its value."
    },
    {
      "commit": "c800b9dd18ecaf8f11bc1382ad0f54d8b8f0f626",
      "tree": "58a268abbd175a20762304802bc79d18bcfb8875",
      "parents": [
        "1993b75fef962fc34f26b795ec459afaab228c7f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Sat Jun 06 00:15:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 00:15:32 2026"
      },
      "message": "Improve optimization of select between same values (#8806)\n\nWe previously optimized selects between the same value only when the\nifTrue and ifFalse values had identical structure and no side effects\nand the condition could be dropped or reordered with the value.\n\nMake this more robust by using the `areConsecutiveInputs...` utilities\nto check whether the arms have equal values and whether they are\nfoldable. The old code avoided introducing blocks to keep code size\ndown, but the blocks it would introduce are not named and will be elided\nin the output, so introducing blocks is not a problem. The old code also\navoided introducing a scratch local, but if a scratch local is\nnecessary, it is because the arms have some side effects that would\nprevent reordering. In that case it is more likely to be beneficial to\nexecute only one arm, so go ahead and use scratch locals in the case\nwhere the second arm can be folded away."
    },
    {
      "commit": "1993b75fef962fc34f26b795ec459afaab228c7f",
      "tree": "c3fd34e6bcb9d0775aa0b49d0e72e73c974f3786",
      "parents": [
        "32a8e1bdf53d0d49210788f9a6ca08b6b4f3f999"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Sat Jun 06 00:14:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 00:14:29 2026"
      },
      "message": "Skip idempotent test in fuzzing.py (#8809)\n\nThe fuzzer cannot preserve idempotency, so it does not support initial\ncontents with idempotency annotations."
    },
    {
      "commit": "32a8e1bdf53d0d49210788f9a6ca08b6b4f3f999",
      "tree": "eb708a5897ea2808d6dc1a8b5dd56d509a6a769a",
      "parents": [
        "f58a1962519383fd16e3813c51897d0aead9afed"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Fri Jun 05 23:00:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 23:00:17 2026"
      },
      "message": "[C/JS API] Add BinaryenExpressionAllocateAndWriteText (#8717)\n\nAdds a function for returning a string representation of an expression\nin s-expression format.\n\nfixes #8716"
    },
    {
      "commit": "f58a1962519383fd16e3813c51897d0aead9afed",
      "tree": "006625dd44398c7631851fc9b71d4e23eea3c643",
      "parents": [
        "fb29c73730a81080ec23636d71860e2565d5919c"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jun 05 17:49:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 17:49:19 2026"
      },
      "message": "Improve ref.eq optimization (#8805)\n\nOptimizeInstructions would previously optimize ref.eq by checking if its\noperands were equal and foldable. If so, it would be replaced with the\ndropped operands (if they had effects that needed preserving) followed\nby a constant 1. Improve this by dropping only one of the operands; if\nthey are equal and foldable, then there is no need to keep both around.\nWhen the operands do not have effects, this leaves more work for Vacuum\nthan the old optimization did, but that\u0027s fine.\n\nAlso newly optimize when the operands are equal but not foldable. In\nthis case they can still be dropped and followed by a constant 1.\n\nFinally, replace the EffectAnalyzer `invalidates` call in\n`areConsecutiveInputsEqualAndFoldable` with an `orderedBefore` call. Add\ntests using release/acquire operations to show that the direction of the\neffect comparison is correct."
    },
    {
      "commit": "fb29c73730a81080ec23636d71860e2565d5919c",
      "tree": "b2cdce3c23d4750a4cc23306cf464ac65477f562",
      "parents": [
        "420e74e6f91121234dbfeb91810a98ba28bf6998"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jun 05 17:44:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 17:44:23 2026"
      },
      "message": "Fix areConsecutiveInputsEqual for idempotent calls (#8804)\n\nOptimizeInstruction\u0027s `areConsecutiveInputsEqual` function finds the\neffects that are executed in between the left-hand and right-hand\nexpressions and checks that they cannot affect the value of the\nright-hand expression or its operands. However, it did not previously\nhandle the case where the left-hand expression itself changes the value\nof the operands flowing into the right-hand expression. This can happen\nin the case of calls to idempotent functions, where the first call\nchanges a global that is passed as an argument to the second call."
    },
    {
      "commit": "420e74e6f91121234dbfeb91810a98ba28bf6998",
      "tree": "d9771a103c090f1be033b3f74bb40f6e79bbcafc",
      "parents": [
        "a568a144578777b9aea4433c17183067788e1850"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jun 05 17:15:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 17:15:50 2026"
      },
      "message": "Fuzz with start functions (#8736)\n\n* Before we always removed the start, now we randomly may keep or replace it.\n\n* Handle instantiation errors (traps and exceptions) in the various fuzzers.\n\n* Remove the start function in fuzzers that break on it. E.g. Merge merges two\n  modules and checks that the combined exports are as expected, but the order of\n  start execution is confusing (the second module\u0027s start executes before the\n  first module\u0027s exports). This is done using a new test-only RemoveStart pass.\n\n* Standardize the instantiation error in fuzz_shell.js, which used quit\n  (that not all VMs support).\n\n* Handle errors during the start function in our interpreter. We must track\n  whether we are in the start, then error on attempts to use an export (as in\n  JS, no exports exist at this time)."
    },
    {
      "commit": "a568a144578777b9aea4433c17183067788e1850",
      "tree": "9287077efacb80b48f1da07f88dcbfdd0abd6f19",
      "parents": [
        "213840526620f66cf478fc436c17f0c98e646311"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jun 05 17:04:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 17:04:44 2026"
      },
      "message": "[NFC] Using orderedBefore in skipNonNullCast (#8803)\n\nWhen OptimizeInstructions skips explicit `ref.as_non_null` instructions\nbecause they are flowing into a parent expression that will already do a\nnull check, it has to check that moving the trap effect past any\nsubsequent children of the parent is allowed. Update the code to use\n`orderedBefore` instead of `invalidates`. Also make this change in\nanother place that removes a `ref.as_non_null` in the same way.\n\nThis is not a functional change because traps are ordered symmetrically\nwith other effects; a trap can be moved forward past another effect iff\nit can be moved backward past that other effect. The code therefore has\nthe same behavior whether it uses `orderedBefore`, `orderedAfter`, or\n`invalidates` here. `orderedBefore` makes the most sense given then\ncontext, though."
    },
    {
      "commit": "213840526620f66cf478fc436c17f0c98e646311",
      "tree": "7c20a535eaa3d15c361fa9c3dad60a6a7da57300",
      "parents": [
        "9e3b947bef886553fa9e7da6d683110d60d91f54"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jun 05 16:11:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 16:11:55 2026"
      },
      "message": "Link wasm-wasm directly in the fuzzer (#8794)\n\nThis avoids passing JSPI-wrapped exports from one wasm module as the\nimports to another. Without this, the stack traces and erroring behavior become\nvery confusing.\n\nLeaving full investigation to the JSPI behavior here for later, this seems\nsafe to land to unblock current work on the fuzzer (#8736, start function\nfuzzing)."
    },
    {
      "commit": "9e3b947bef886553fa9e7da6d683110d60d91f54",
      "tree": "c2d0cd8983a1ba364bc59a45be2523e611e0f7ff",
      "parents": [
        "f390f3bb3d04359f01daec764e64f9032df246fc"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jun 04 22:35:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 22:35:06 2026"
      },
      "message": "Revert \"Fix open world public types\" (#8802)\n\nReverts WebAssembly/binaryen#8792.\n\nThis change broke the fuzzer and real users due to an interaction\nbetween DAE optimizing private, non-referenced functions by introducing\nexact references in the parameters and results and MinimizeRecGroups\nexpecting all public types (which now included the types of private,\nnon-referenced functions) to be distinct, taking features into account.\n\nRevert this change while we fix it to be more precise about which\nfunction types are public and to make sure the fuzzer is otherwise happy\nwith it."
    },
    {
      "commit": "f390f3bb3d04359f01daec764e64f9032df246fc",
      "tree": "71bb6113f943333437d997936733591049242417",
      "parents": [
        "af7a13c4cb57b554dec0880dff3142d1fe490b97"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Jun 04 15:52:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 15:52:31 2026"
      },
      "message": "FuzzAgainstJS: Fix tuple size when nothing was noted (#8801)\n\nBefore, if we had a tuple with nothing noted, we could refine it to a\nsingle value, i.e., breaking the arity. Instead, keep the arity\nunchanged from before."
    },
    {
      "commit": "af7a13c4cb57b554dec0880dff3142d1fe490b97",
      "tree": "ed245e4facb5a954d15d4677b58415c5be6b4659",
      "parents": [
        "5e0ad2cc504f49777f4906e79359964e1d3ad505"
      ],
      "author": {
        "name": "Roberto Lublinerman",
        "email": "rluble@google.com",
        "time": "Wed Jun 03 16:43:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 16:43:41 2026"
      },
      "message": "j2cl-merge-itables: Fatal abort if optimizable types are public (#8800)\n\nAdds a sanity check to abort if any of the Java classes end up being\npublic."
    },
    {
      "commit": "5e0ad2cc504f49777f4906e79359964e1d3ad505",
      "tree": "f6ce593b8732c525331bc36eb65fd546ccd79be9",
      "parents": [
        "6bb9fe22ad64df1752a79c6784bccd233a4c9117"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 02 19:38:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 19:38:59 2026"
      },
      "message": "Fix ChildTyper on unreachable and shared ArrayCmpxchg (#8797)"
    },
    {
      "commit": "6bb9fe22ad64df1752a79c6784bccd233a4c9117",
      "tree": "673d14f9ac90d2a44c6766418a196b841f6af674",
      "parents": [
        "b9c72894fba2ee5bef8e4002fb176c1917a556ad"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Jun 02 19:13:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 19:13:36 2026"
      },
      "message": "Fix open world public types (#8792)\n\nIn an open world, we have to assume that the environment may cast any\npublic type down to any of its subtypes and expect that to work before\nand after optimization. We therefore must make public visibility\npropagate to subtypes.\n\nBut we can be more precise than this, because some types are public not\nbecause they can cross the module boundary, but rather because they are\nreachable in the definition of some other type that can cross the module\nboundary. Subtypes of such public types do not need to be public, since\ntheir values will never cross the module boundary. In addition, we do\nnot need to make public the subtypes of types that are exposed only as\nexact references.\n\nAllow Unsubtyping to operate in open-world mode and use it in tests that\nthe visibility propagation works correctly.\n\nFixes #8718."
    },
    {
      "commit": "b9c72894fba2ee5bef8e4002fb176c1917a556ad",
      "tree": "d5bb3867db997920789795cb40be5fbce6cca74b",
      "parents": [
        "a7c09934d169bb3323e87e85d7db0acf4ce2e326"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Jun 02 17:57:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 17:57:28 2026"
      },
      "message": "Account for unaddressed funcs in GlobalEffects (#8644)\n\nPart of #8615. We currently union the effects of all functions of a\ngiven type when computing the effects for indirect calls. Make this more\nprecise by excluding effects of functions that never have their address\ntaken.\n\nContinued from #8628 which was accidentally merged."
    },
    {
      "commit": "a7c09934d169bb3323e87e85d7db0acf4ce2e326",
      "tree": "89e0d822cc9447df497a2b8dc587b3b895e50653",
      "parents": [
        "5c017d1596ee876f98a511a89db83d1492852e3a"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Jun 02 06:45:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 06:45:28 2026"
      },
      "message": "[wasm-split] Rename active table to dispatch table (NFC) (#8795)\n\nThis renames active table and active segments to dispatch table and\ndispatch segments. I feel \"active segments\" sound confusing because this\ncan read as non-passive segments."
    },
    {
      "commit": "5c017d1596ee876f98a511a89db83d1492852e3a",
      "tree": "a1bba38e784ee1b0495b4417b696a2ac24b63c69",
      "parents": [
        "226787d20cca523fece850f58ada4b87e0af4580"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Tue Jun 02 06:00:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 06:00:32 2026"
      },
      "message": "[wasm-split] Don\u0027t generate trampolines on all active segments (#8796)\n\nWe should skip all active segments in the active table when creating\ntrampolines for indirect references. Currently we only do it for the\nlast active segment, in case there are multiple of them."
    },
    {
      "commit": "226787d20cca523fece850f58ada4b87e0af4580",
      "tree": "4aae9efbf48f849e81dfa3d8b9d297bbdbf9627a",
      "parents": [
        "5d704ad52bc77a258e8fa3f9d34fcc5e8799c1c3"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 01 21:57:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 21:57:39 2026"
      },
      "message": "PrintBoundary: Handle recursive types (#8786)\n\nBefore, we infinitely recursed.\n\nAdd this to fuzzing to find further issues.\n\nDrive-by: fix a `python` to `python3` in a script I just noticed."
    },
    {
      "commit": "5d704ad52bc77a258e8fa3f9d34fcc5e8799c1c3",
      "tree": "0b733f48dfa2ef418bc7b57674648aac8ca9eac1",
      "parents": [
        "806fab60bbdbe87794a13cd18b0efca2a13b854a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 01 21:00:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 21:00:57 2026"
      },
      "message": "Version 130 (#8793)"
    },
    {
      "commit": "806fab60bbdbe87794a13cd18b0efca2a13b854a",
      "tree": "441edc163a40e92473691ac3c7cca06effbc2efc",
      "parents": [
        "8531324a9d2f5c04ae69d769f68c4d5910f28fe1"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 29 23:38:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 29 23:38:22 2026"
      },
      "message": "update_lit_tests.py: Do not leak results between modules (#8791)\n\nUse an internal separator when doing `foreach`, i.e., when there are\nmultiple modules."
    },
    {
      "commit": "8531324a9d2f5c04ae69d769f68c4d5910f28fe1",
      "tree": "7b0a6d552a635edf044a6667e26f848338c0c17d",
      "parents": [
        "a6f59c6bc0302eafe3568415b0057d8919ecdfb0"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri May 29 05:31:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 29 05:31:29 2026"
      },
      "message": "[wasm-split] Move computeTransitiveGlobals into getUsedNames (NFC) (#8790)\n\nThis doesn\u0027t have to be a separate function outside `getUsedNames`."
    },
    {
      "commit": "a6f59c6bc0302eafe3568415b0057d8919ecdfb0",
      "tree": "12e80c5783877b9f106525479d1bd0dc90a6d4b6",
      "parents": [
        "ec73e2ba8a6cefc3efe1e714333afdf790ffb9d7"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 28 21:00:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 21:00:57 2026"
      },
      "message": "Make areConsecutiveInputsEqual more precise (#8783)\n\nCollect the interfering effects specifically from the expressions that\nare evaluated in between the LHS and RHS fallthrough values. The\nprevious code overapproximated this by collecting all effects from the\nLHS and RHS expressions, whether or not the effects were due to\nsubexpressions that would have been evaluated before or after the LHS\nand RHS values. Also use a direction-aware effect ordering check."
    },
    {
      "commit": "ec73e2ba8a6cefc3efe1e714333afdf790ffb9d7",
      "tree": "e035b2f8a8edb176f6e4886407df7e28471daf4b",
      "parents": [
        "ab2d66cf85b4933b1624bc187ab21fdedb441cf6"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu May 28 20:51:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 20:51:09 2026"
      },
      "message": "NFC: Require override keyword (#8789)"
    },
    {
      "commit": "ab2d66cf85b4933b1624bc187ab21fdedb441cf6",
      "tree": "eb7d44a89e94610492fe500cd78c94d05878e9ef",
      "parents": [
        "a72691c422a631f177af86fd929751f4c5847047"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 28 20:50:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 20:50:00 2026"
      },
      "message": "[StackSwitching] Error properly on an unhandled resume during start (#8787)\n\nBefore, we asserted on stale state.\n\nFix the auto-updater script to not crash on such output (an exec\nline before any function). That happens to improve one existing\ntest output."
    },
    {
      "commit": "a72691c422a631f177af86fd929751f4c5847047",
      "tree": "6b3842c28bd0f1088a854970f2213fd83f581686",
      "parents": [
        "513aa1f662009ba743cd2495f3d69f0c32b2d509"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 28 19:41:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 19:41:36 2026"
      },
      "message": "Skip d8 lit tests on windows (#8788)\n\nIt is not clear why v8 is not installed on CI specifically on\nwindows-arm, but apparently it isn\u0027t. As this just affects 4 tests, skip them on\nwindows.\n\nExample error:\n\n\nhttps://github.com/WebAssembly/binaryen/actions/runs/26543251282/job/78189409612\n\n```\nFailed Tests (4):\n  Binaryen lit tests :: d8/fuzz_shell.wast\n  Binaryen lit tests :: d8/fuzz_shell_exceptions.wast\n  Binaryen lit tests :: d8/fuzz_shell_jspi.wast\n  Binaryen lit tests :: d8/fuzz_shell_sleep.wast\n\n```"
    },
    {
      "commit": "513aa1f662009ba743cd2495f3d69f0c32b2d509",
      "tree": "d399cc9aee449f7110b7fc09f9ea3807c3aaec44",
      "parents": [
        "f499c8468541ac0a693898fa5a21b81d49e39ce4"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu May 28 18:24:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 18:24:32 2026"
      },
      "message": "[wasm-split] Fix error printing when func does not exist (#8784)\n\nWhen `func` is null, we can\u0027t query `func-\u003ename`."
    },
    {
      "commit": "f499c8468541ac0a693898fa5a21b81d49e39ce4",
      "tree": "d8d204b6a5a7ae5ff4cd26f1ee9685657a5bc037",
      "parents": [
        "ab25864b0b3b81505074277048196389f78038c4"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu May 28 18:24:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 18:24:13 2026"
      },
      "message": "Add isActive/isPassive methods to segments (NFC) (#8782)\n\nCurrently `DataSegment` class has `isPassive` member variable but\n`ElementSegment` doesn\u0027t. `DataSegment`\u0027s `isPassive` variable is\nredundant anyway because we can test whether its `memory` is set, as we\ndo for `ElementSegment`\u0027s `table`.\n\nThis removes `DataSegment::isPassive` variable, and instead adds\n`isPassive()` and `isActive()` methods to both classes and use them\ninstead of things like `if (segment-\u003etable)`.\n\nThis also removes `isPassive` parameter from `makeDataSegment` in\n`Builder`."
    },
    {
      "commit": "ab25864b0b3b81505074277048196389f78038c4",
      "tree": "cc3a6f3549401d6307be03fd644a778d52cf1daf",
      "parents": [
        "ac6c001b75f7ace237e94dcd522cdc6462e768e8"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed May 27 22:47:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 22:47:05 2026"
      },
      "message": "Enable fuzzing for wide arithmetic (#8781)\n\nPart of #8544. The V8 implementation is ready now under an experimental\nflag."
    },
    {
      "commit": "ac6c001b75f7ace237e94dcd522cdc6462e768e8",
      "tree": "6ea7b5c347c3148b6ab2c52239e62144d6a6b324",
      "parents": [
        "04adfce58972427b08972ae954449bb514b32766"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed May 27 20:16:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 20:16:54 2026"
      },
      "message": "Fuzz wide arithmetic instructions (#8661)\n\nPart of #8544. Continued in #8781.\n\nDrive-by fix: ensure that tuples aren\u0027t generated with a size larger\nthan TUPLE_MAX_SIZE:\n\n```diff\n-  size_t maxElements \u003d 2 + upTo(fuzzParams-\u003eMAX_TUPLE_SIZE - 1);\n+  size_t maxElements \u003d 2 + upTo(fuzzParams-\u003eMAX_TUPLE_SIZE - 2);\n```\n\nAfter increasing the seed file size, the wide arithmetic instructions\n[were\ngenerated](https://github.com/WebAssembly/binaryen/actions/runs/26316945566/job/77478064626)\n(ctrl + f \"wideint\"), but fails in CI due to #8770. For now I leave the\nseed file unchanged without showing that the wide arithmetic\ninstructions are generated in the golden file.\n\nAlso generated a new seed for test/lit/fuzz-import.wast since it was\nfailing after these changes, seemingly due to bad luck (which the test\nfile mentions is a possibility)."
    },
    {
      "commit": "04adfce58972427b08972ae954449bb514b32766",
      "tree": "3ee8eedc762a101e9206722a13b30dc7d8284e8e",
      "parents": [
        "9f2642a28f6d2963a7dbe134dee80cb5163c67e9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 27 17:15:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 17:15:58 2026"
      },
      "message": "[wasm-ctor-eval] Do not error on non-constant code in the start function (#8778)\n\nBefore, we did not catch the Nonconstant exception."
    },
    {
      "commit": "9f2642a28f6d2963a7dbe134dee80cb5163c67e9",
      "tree": "e564f7805b340484e8fe380f25a998b1bb64eca3",
      "parents": [
        "83f68e13b2cd22e52a8e8c19b9a48cc11416c99a"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed May 27 02:36:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 02:36:10 2026"
      },
      "message": "NFC: Simplify test with improved indirect call effects (#8780)\n\nThis was missed after #8625 and #8738. We don\u0027t need the extra\nindirection of a direct call in the test since we\u0027re testing effect\nanalysis for indirect calls and call chains containing both indirect and\ndirect calls is already tested\n[here](https://github.com/WebAssembly/binaryen/blob/83f68e13b2cd22e52a8e8c19b9a48cc11416c99a/test/lit/passes/global-effects-closed-world.wast#L248-L251)."
    },
    {
      "commit": "83f68e13b2cd22e52a8e8c19b9a48cc11416c99a",
      "tree": "4e9e7d8931eacd96fbb55952b67fa8ba85d60728",
      "parents": [
        "818de5e9c9e959e470c145f9f562991cf45fa952"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue May 26 23:04:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 23:04:10 2026"
      },
      "message": "[wasm-ctor-eval] Avoid local and global state getting out of sync (#8776)\n\nSimplify this by clearing before any serialization. Before, if we\npartially evalled, the local and global state could diverge, leading to locals\nreferring to the wrong globals.\n\nChanges to the existing test are NFC, just reordering of names (sadly)."
    },
    {
      "commit": "818de5e9c9e959e470c145f9f562991cf45fa952",
      "tree": "b3216b034d6e4a564976bceb704f789ccbfb9776",
      "parents": [
        "865b60914e35d66bb40f3de733f733ab5f020e08"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 22:53:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 22:53:38 2026"
      },
      "message": "OptimizeCasts: Migrate from invalidates to orderedBefore (#8774)\n\nReplace the coarse \u0027invalidates\u0027 check in \u0027OptimizeCasts\u0027 with\n\u0027orderedBefore\u0027. This is a cleanup to use the more precise directional\neffects check.\n\nAlso add a new lit test to verify that casts (which have trap effects)\nare correctly allowed to move past global state reads but blocked by\nglobal state writes.\n\nTAG\u003dagy"
    },
    {
      "commit": "865b60914e35d66bb40f3de733f733ab5f020e08",
      "tree": "5722d67e0b66b38d92a2cf113d3942272e9548c5",
      "parents": [
        "95e7dfa3cffa0cb6792a116ac28c58bb788d086e"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 20:48:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 20:48:00 2026"
      },
      "message": "Update merge-blocks-atomics.wast expectations (#8777)\n\nThis incorrect test expectation was force-landed past a CI infra\nfailure, so is causing failures on main. Fix it."
    },
    {
      "commit": "95e7dfa3cffa0cb6792a116ac28c58bb788d086e",
      "tree": "1e2dacb166f342acc1f622a0abc799fee2bcf737",
      "parents": [
        "6a7249360da5499f0e135a288ac92c334079ad26"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 18:48:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 18:48:17 2026"
      },
      "message": "[NFC] Refactor closedWorld to WorldMode enum (#8740)\n\nReplace the `closedWorld` boolean in `PassOptions` with a `WorldMode`\nenum which has `Closed` and `Open` variants. Also introduce\n`ModuleUtils::getExposedPublicHeapTypes` to collect directly exposed\npublic types, and updates `getPublicHeapTypes` to take `WorldMode` as a\nparameter. These refactorings will make a subsequent commit changing how\nwe collect public heap types in open-world mode simpler."
    },
    {
      "commit": "6a7249360da5499f0e135a288ac92c334079ad26",
      "tree": "da714f8a00c2e6835c3971d2599091a647f41a84",
      "parents": [
        "aea97f8506268d5e341858d372ef20858aeefa9d"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue May 26 16:04:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 16:04:12 2026"
      },
      "message": "Use cmake standard `BUILD_SHARED_LIBS` setting (#8764)\n\nSee https://cmake.org/cmake/help/latest/variable/BUILD_SHARED_LIBS.html\n\nI\u0027m not sure why we made up our own setting here rather than using the\nstandard one."
    },
    {
      "commit": "aea97f8506268d5e341858d372ef20858aeefa9d",
      "tree": "9abad2cfc4143159818a5ad00e57f40171e4b56d",
      "parents": [
        "d78dba37bca6dac681124e565318e655a44aea49"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 15:54:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 15:54:26 2026"
      },
      "message": "Fix refinalization for --gufa-cast-all (#8773)\n\nIn #8747 we refactored GUFA\u0027s `replaceCurrent` to set `optimized \u003d true`\nand removed the now-redundant `optimized \u003d true` at all the call sites.\nBut we were too aggressive and removed an `optimized \u003d true` in `Adder`,\nwhich had a separate `replaceCurrent` that did not set `optimized \u003d\ntrue`. This caused a regression where we no longer refinalized after\nadding casts, but the regression was not caught by any tests.\n\nFix the bug and add a test that depends on refinalization after adding\ncasts."
    },
    {
      "commit": "d78dba37bca6dac681124e565318e655a44aea49",
      "tree": "c19744ec8a720623ea4d4447ced9b1206f977029",
      "parents": [
        "9d2c168dd525b3e843c39547fbf86723082c48d4"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 15:48:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 15:48:15 2026"
      },
      "message": "MergeBlocks: Migrate from invalidates to orderedBefore (#8767)\n\nReplace the coarse \u0027invalidates\u0027 check in \u0027MergeBlocks\u0027 with\n\u0027orderedBefore\u0027. This allows \u0027MergeBlocks\u0027 to move expressions (like GC\nreads) out of blocks past other sibling expressions that have been left\nbehind.\n\nAlso clean up dead code in \u0027optimize()\u0027 by removing the unused\n\u0027dependency1\u0027 and \u0027dependency2\u0027 parameters and their checks (which were\nthe other two replaced \u0027invalidates\u0027 calls that are no longer active).\n\nTAG\u003dagy"
    },
    {
      "commit": "9d2c168dd525b3e843c39547fbf86723082c48d4",
      "tree": "d72fd8dcf9e960e227a2912b07fbf3e5b6914334",
      "parents": [
        "fe6e02c58e3898e3a8140cf9bb8e13d2e130f368"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 15:45:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 15:45:21 2026"
      },
      "message": "[NFC] Simplify externref literal representation (#8765)\n\nInstead of using a complex bit-packing scheme to represent externref\npayloads and differentiate them from externalized internal references,\nsimply store the payload in the GCData. Externalized internal references\nare also stored in the GCData, but can be differentiated from externref\npayloads because the latter have type i32 and the former are always\nreference types.\n\nBesides being complex, the bit packing scheme was also incorrect on\nbig-endian architectures."
    },
    {
      "commit": "fe6e02c58e3898e3a8140cf9bb8e13d2e130f368",
      "tree": "223fde467c8590047c6ed19f1c795d1a3638efb9",
      "parents": [
        "67c63733dc5d496fb63a4f470a2f9d3b4235701c"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue May 26 15:25:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 15:25:25 2026"
      },
      "message": "Support resuming into try-catch in interpreter (#8757)\n\nEnable resuming execution into `try` and `catch` blocks in the\ninterpreter. For catch blocks, preserve the exception stack state so\nthat `rethrow` and other exception operations work correctly after\nresumption.\n\nTAG\u003dagy"
    },
    {
      "commit": "67c63733dc5d496fb63a4f470a2f9d3b4235701c",
      "tree": "79898f7e8a974a93b10d9cd2dffb6bc996ac9af5",
      "parents": [
        "8b61409636f76adb679d90370c1da867fc9d61ec"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Sun May 24 02:51:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 02:51:00 2026"
      },
      "message": "NFC: Use `const EffectAnalyzer\u0026` in ostream operator (#8769)\n\nAllows printing `const EffectAnalyzer`s.\n\nAlso move the ostream operator into the `wasm` namespace to avoid UB\nfrom extending std:\nhttps://en.cppreference.com/cpp/language/extending_std"
    },
    {
      "commit": "8b61409636f76adb679d90370c1da867fc9d61ec",
      "tree": "5eac521b642057f36e35b55f612c82ca4fa6d448",
      "parents": [
        "abfdaeee8c8bd7eb9db773771374c3ad536675c4"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Sat May 23 02:34:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 02:34:27 2026"
      },
      "message": "[wasm-split] Scan trapping globals if custom descriptors is enabled (NFC) (#8768)\n\nWe don\u0027t need to compute effects for all global initializers unless\ncustom-descriptors is not enabled. Should have done this with #8742."
    },
    {
      "commit": "abfdaeee8c8bd7eb9db773771374c3ad536675c4",
      "tree": "8f2ced970f1b6d30156777b3d1c428a03cab9af1",
      "parents": [
        "a69c666279b7bc9df3f83895ada44f84ff56eb7c"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Sat May 23 00:38:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 00:38:57 2026"
      },
      "message": "Use indirect call effects in LinearExecutionWalker (#8738)\n\nPart of #8615. Follows up from #8637 now that global effects for\nindirect calls has been added.\n\nAllows LinearExecutionWalker to *not* halt and continue scanning when an\nindirect call is encountered in the case the global effects have been\ncomputed under `--closed-world` and we determined that the indirect call\ncan\u0027t have any throw effects. LinearExecutionWalker is used in the\nfollowing passes:\n\n* LocalGraph\n* LocalCSE\n* OptimizeCasts\n* SimplifyGlobals\n* SimplifyLocals\n* GUFA\n* TypeRefining"
    },
    {
      "commit": "a69c666279b7bc9df3f83895ada44f84ff56eb7c",
      "tree": "e5af05d474fc6deeb84073b053a7ddd83aecdf93",
      "parents": [
        "962bd54ee9f5c32a1209d2ad63dbfafaf9231960"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri May 22 23:59:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 23:59:59 2026"
      },
      "message": "[wasm-split] Generate fillers in MVP + --no-placenolders (#8759)\n\nWhen --no-placeholder is given and reference-types is disabled, we\ncannot fill the table with `ref.nulls`. Previously we were generating\n`ref.null`s anyway, creating invalid modules. This generates filler\nfunctions in place of `ref.null`s."
    },
    {
      "commit": "962bd54ee9f5c32a1209d2ad63dbfafaf9231960",
      "tree": "45a7f7711d1b557f49d394493184bc90878e5e13",
      "parents": [
        "f19f8e13b9f1df43db1adacccbca6ef9003ba601"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 23:40:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 23:40:46 2026"
      },
      "message": "HeapStoreOptimization: Migrate from invalidates to orderedBefore (#8758)\n\nReplace the coarse `invalidates` check in `HeapStoreOptimization` with\n`orderedBefore`. This allows `HeapStoreOptimization` to optimize heap\nstores across release stores (e.g., moving a GC read before a release\nstore), while still correctly blocking them from being moved before\nacquire loads.\n\nAdded a lit test to verify the asymmetrical reordering behavior with\nrelease/acquire atomics on shared GC structs and Wasm memory.\n\nTAG\u003dagy"
    },
    {
      "commit": "f19f8e13b9f1df43db1adacccbca6ef9003ba601",
      "tree": "34865b823f790c7c9ea881f08415ae3f7da4b675",
      "parents": [
        "36ef125bc7bb702790fde39e4fdaa14e767f053e"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 23:01:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 23:01:00 2026"
      },
      "message": "Fix typo in mark-js-called.wast (#8755)\n\nFound by my local spellchecking git hook when performing a merge."
    },
    {
      "commit": "36ef125bc7bb702790fde39e4fdaa14e767f053e",
      "tree": "5cf2d289e9b58b0c92de5fcae59e247492b0b7ec",
      "parents": [
        "505dae4a6fa9fe4eee8e9c92ab7380699e73717f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 22:49:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 22:49:29 2026"
      },
      "message": "Fix block-nested Pop in GUFA (#8747)\n\nIn GUFA, when optimizing RefEq or RefTest expressions, they are replaced\nby constants if the optimizer can prove the two sides have no\nintersection. However, if the expression contains side effects (like a\nPop), getDroppedChildrenAndAppend is used to preserve them, which wraps\nthe side-effect expressions in a Block.\n\nIf the Pop is nested inside this Block, it becomes invalidly nested\nwithin the catch block, which violates validation rules. GUFA has a\nfixup pass (EHUtils::handleBlockNestedPops) designed to fix this by\nspilling the Pop to a local, but it was not being run because visitRefEq\nand visitRefTest failed to set the `optimized \u003d true` flag.\n\nFix the issue by setting `optimized \u003d true` when RefEq or RefTest are\noptimized, ensuring the post-optimization cleanups (including the nested\npop fixup) are executed.\n\nAdd a regression test to gufa-cast-all.wast."
    },
    {
      "commit": "505dae4a6fa9fe4eee8e9c92ab7380699e73717f",
      "tree": "c5ff1b133574841b72902b027ee1b7e6de23c8d1",
      "parents": [
        "17d9262e2163446b0f3421474109eaed50bda54e"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri May 22 18:09:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 18:09:34 2026"
      },
      "message": "Set `BUILD_STATIC_LIB` under emscripten (#8762)\n\nThis fixes the following warning when building with emscripten:\n\n```\nCMake Warning (dev) at CMakeLists.txt:460 (add_library):\n  ADD_LIBRARY called with SHARED option but the target platform does not\n  support dynamic linking.  Building a STATIC library instead.  This may lead\n  to problems.\nThis warning is for project developers.  Use -Wno-dev to suppress it.\n```"
    },
    {
      "commit": "17d9262e2163446b0f3421474109eaed50bda54e",
      "tree": "c4a98c020ea3ec74a503760e689488564fd5cd66",
      "parents": [
        "5cbd7f09bc5087e1c339f4df72fc01e3fd6aaf89"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri May 22 16:55:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 16:55:29 2026"
      },
      "message": "[NFC] Document reference construction in closed world (#8761)\n\nSee #8754"
    },
    {
      "commit": "5cbd7f09bc5087e1c339f4df72fc01e3fd6aaf89",
      "tree": "4155bfd99c798136c111d76b4d6a19f24ff56190",
      "parents": [
        "0312a6f9c1737d86a010d503ba3a95d569924c27"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 06:31:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 06:31:10 2026"
      },
      "message": "Fix \"pessemistic\" \u003d\u003e \"pessimistic\" (#8756)\n\nFound by my local spell checker git hook during a merge."
    },
    {
      "commit": "0312a6f9c1737d86a010d503ba3a95d569924c27",
      "tree": "cd836d311760501094f2dd5959fda3348e4f1b40",
      "parents": [
        "77679499aee2fa2480416b099651f81e0b151f1e"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri May 22 05:42:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 05:42:42 2026"
      },
      "message": "Set branchesOut effect for call.without.effects (#8695)\n\nFix for #8693"
    },
    {
      "commit": "77679499aee2fa2480416b099651f81e0b151f1e",
      "tree": "2106011f3a040ef88587ef1f80696187307327aa",
      "parents": [
        "f404918453cef6c22774f71a4945cdb187f8e95a"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Fri May 22 05:01:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 05:01:39 2026"
      },
      "message": "Effect analysis for indirect call expressions (#8625)\n\nPart of #8615. After #8609, we compute effects for indirect call\nexpressions, but only reflect this in the call-site via the effects of\nthe `Function` that contains the indirect call. That let us reason about\neffects only one layer of indirection away, for example in the following\nmodule:\n\n```wasm\n(func $a\n  (call_ref $t (...))\n)\n\n(func $b\n  (call $a)\n)\n```\n\nIf we know that an indirect call to $t can\u0027t possibly have any effects\n(e.g. its only potential target is a nop), we\u0027d be able to optimize away\n`(call $a)` but not the `(call_ref)` itself, since the effects only got\nstored in the effects of `$a`.\n\nThis PR lets us reason about indirect call effects at the expression\nlevel within function bodies by adding a map from HeapType to effects\n`typeEffects` in `wasm::Module`. As a result we can completely optimize\nout the `call_ref` in the above example.\n\nDrive-by fixes:\n* Set an unconditional trap effect on call_indirect when the call type\ndoesn\u0027t match the target table.\n* ~~Correctly set `branchesOut` for `return_call` on\n`call.without.effects`. Previously this would not have a `branchesOut`\neffect which may have allowed incorrect reorderings (we shouldn\u0027t move\nan effectful expression above a `return_call` but we would have allowed\nthis).~~ Will follow up in #8693."
    },
    {
      "commit": "f404918453cef6c22774f71a4945cdb187f8e95a",
      "tree": "4fea9066598131a87756906879f2820087fa3657",
      "parents": [
        "da3bff5a8a18d8856aa77745e735f3b68bbb0f9b"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 04:15:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 04:15:02 2026"
      },
      "message": "CodePushing: Migrate from invalidates to orderedBefore (#8745)\n\nReplace the coarse `invalidates` check in `CodePushing` with\n`orderedBefore`. This allows `CodePushing` to push expressions (like GC\nreads) past acquire loads, while still correctly blocking them from\nbeing pushed past release stores.\n\nAdd a lit test to verify the asymmetrical reordering behavior with\nrelease/acquire atomics on shared GC structs and Wasm memory."
    },
    {
      "commit": "da3bff5a8a18d8856aa77745e735f3b68bbb0f9b",
      "tree": "eb670c54ebaaa9b523c25ef47ed8a67660145b30",
      "parents": [
        "58e27a24d5940211ec54cb587ab8a93b931ec5fd"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri May 22 02:05:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 02:05:24 2026"
      },
      "message": "LocalCSE: Migrate from invalidates to orderedBefore (#8744)\n\nReplace the coarse `invalidates` check in `LocalCSE` with\n`orderedBefore`. This allows `LocalCSE` to reuse expression values\nacross release stores, while still correctly blocking reuse across\nacquire loads.\n\nAdd a lit test to verify the asymmetrical reordering behavior with\nrelease/acquire atomics on shared GC structs and Wasm memory."
    },
    {
      "commit": "58e27a24d5940211ec54cb587ab8a93b931ec5fd",
      "tree": "3cc3a70f5bee2d4b1f5cc8572264cb24d3b5f6e8",
      "parents": [
        "9aaee88b765c163be93702baa91364ae4ba6e6e1"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 21 23:18:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 23:18:25 2026"
      },
      "message": "LICM: Migrate from invalidates to orderedBefore (#8743)\n\nReplace the coarse `invalidates` check and the coarse global state check\nin LICM with more precise `orderedBefore` checks. This allows LICM to\nmove memory accesses past release stores, while still correctly blocking\nthem from moving past acquire loads.\n\nAdd a lit test to verify the asymmetrical reordering behavior with\nrelease/acquire atomics on shared memory/GC structs."
    },
    {
      "commit": "9aaee88b765c163be93702baa91364ae4ba6e6e1",
      "tree": "2c85fbb0ff5b7bd7c055055ea62aff513dd1efff",
      "parents": [
        "affe9b72db4845624e8a62750e449bfa66156f8e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 21 22:37:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 22:37:25 2026"
      },
      "message": "Fuzzer: Mark js-called functions before optimizing (#8752)\n\nMarking them after does not work... since the point is to fix things for\noptimizations."
    },
    {
      "commit": "affe9b72db4845624e8a62750e449bfa66156f8e",
      "tree": "3cbbb7dcc9b0d2171ebd03deaf8377f7bcea99e2",
      "parents": [
        "f526098d83d9b2928bdc140d37f3763cdbf81961"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 21 21:45:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 21:45:58 2026"
      },
      "message": "RemoveUnusedModuleElements: Referenced elems refer to their offsets (#8750)"
    },
    {
      "commit": "f526098d83d9b2928bdc140d37f3763cdbf81961",
      "tree": "0a75743c4fe1071966c0f9aeab57d8d8f4c459bc",
      "parents": [
        "86910224b8632751b705a39938023a2132ce75f5"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 21 21:45:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 21:45:44 2026"
      },
      "message": "[Stack Switching] Fix continuation execution from a start function (#8751)\n\nRather than set the module after creation - which is after the start is\ncalled - do it during init, which is also simpler."
    },
    {
      "commit": "86910224b8632751b705a39938023a2132ce75f5",
      "tree": "142b74e7f23651408423a2010f628e8e5b198f33",
      "parents": [
        "1215ea4eaa5146cd2cb5a7318a5f512ac3fe5928"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu May 21 21:31:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 21:31:34 2026"
      },
      "message": "[wasm-split] Don\u0027t split trapping globals (#8742)\n\nTrapping globals, which became possible with the custom-descriptor\nproposal, should stay in the primary module because we have to preserve\ntheir trapping behavior upon instantiation.\n\nAlso, note that we remove unused globals here:\n\nhttps://github.com/WebAssembly/binaryen/blob/17a90787bae4f4544e25b3e7833da076e0d543de/src/ir/module-splitting.cpp#L896-L903\nBut trapping globals shouldn\u0027t be removed even when they are unused to\npreserve the trapping behavior.\n\nIn case someone wants to split modules assuming traps never happen, this\nalso adds `--traps-never-happen` option to wasm-split, in which case we\ncan freely split or remove trapping globals."
    },
    {
      "commit": "1215ea4eaa5146cd2cb5a7318a5f512ac3fe5928",
      "tree": "9285cfd0ba24b67624fb92747ac758f28089cd96",
      "parents": [
        "d215f0303a4d449b3664419bbdadbb42d63a508a"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Thu May 21 21:31:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 21:31:26 2026"
      },
      "message": "[Fuzzer] Make Split\u0027s exports a list of strings (#8731)\n\nWhen the export name contains a comma, such as `foo\u003cx,y\u003e`, the v8\ncommand does not work:\n```colsole\nv8 ... exports:foo\u003cx,y\u003e,bar,... --fuzz-split\n```\n\nThis generates an `exports` as a list of strings within quotes,\nsupporting export names with commas:\n```colsole\nv8 ... exports:[\"foo\u003cx,y\u003e\",\"bar\",...] --fuzz-split\n```\n\nThis still parses the old format of `exports` in case it doesn\u0027t contain\ncommas, which I think might be useful for handwritten command lines."
    },
    {
      "commit": "d215f0303a4d449b3664419bbdadbb42d63a508a",
      "tree": "4547bff9a0336bcb6f5c6175c73bcd5fc6942399",
      "parents": [
        "cfc3d50b89e5745fd03db29d650b726bcb146f6c"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 21 21:14:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 21:14:38 2026"
      },
      "message": "Fix ContinuationStore desynchronization (#8741)\n\nWhen a primary module execution traps or suspends to the host, its\ncontinuation store is cleared. Previously, this was done by reassigning\nthe shared_ptr to a new ContinuationStore instance. However, secondary\n(linked) modules that were instantiated prior to this still hold the\noriginal shared_ptr to the old ContinuationStore. This led to\ndesynchronization, where the secondary module would run with stale\ncontinuation state (including leaked continuations and resuming flags),\neventually causing crashes like assertion failures in visitSuspend.\n\nThis fix changes clearContinuationStore to clear the ContinuationStore\nin-place (clearing the continuations vector and resetting resuming flag)\ninstead of reassigning the shared_ptr, ensuring all linked modules\ncontinue to share the same cleared state.\n\nAdded a lit test to verify the fix and prevent regression."
    },
    {
      "commit": "cfc3d50b89e5745fd03db29d650b726bcb146f6c",
      "tree": "9d0901036c193b5ecdf808caeb92b655bde091a7",
      "parents": [
        "2f63efb3681c47da15c5e3f5edbb7319c40d9227"
      ],
      "author": {
        "name": "Sertonix",
        "email": "sertonix@posteo.net",
        "time": "Thu May 21 18:54:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 18:54:45 2026"
      },
      "message": "Fix i64x2 shift on big-endian (#8748)\n\nSince the i64x2.sh* functions use i32 as shift argument the access to\n`other.i64` may not use the correct union member. On big-endian systems\nthis causes tests in `test/spec/testsuite/simd_bit_shift.wast` and a few\nother places to fail.\n\nRef https://github.com/WebAssembly/binaryen/issues/2983"
    },
    {
      "commit": "2f63efb3681c47da15c5e3f5edbb7319c40d9227",
      "tree": "dd05c7ca14bdc17cec13511d50ef28ab920ea513",
      "parents": [
        "371faf73decf05acde4cd0bd0f298fd2be90f1e7"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 21 17:36:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 17:36:59 2026"
      },
      "message": "Require linux on the wasm-reduce lit test (#8749)\n\nFor some reason this test is crashing on the Windows CI and possibly\ncausing timeouts. Only run it on linux for now to avoid blocking other\nPRs from going in."
    },
    {
      "commit": "371faf73decf05acde4cd0bd0f298fd2be90f1e7",
      "tree": "269110d936d687951f1c2c5d77d056517b35e202",
      "parents": [
        "84ace4aa2cab2fed7b2fd12a1e91e5a2ce342811"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu May 21 16:30:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 16:30:18 2026"
      },
      "message": "Fix test_cluster_fuzz.py V8 flags mismatch (#8746)\n\nWhen running test_cluster_fuzz.py, it was launching V8 with a hardcoded\nlist of flags, instead of reading the flags from the generated flags\nfile. This caused V8 to fail compilation of test cases that included \nrelaxed atomics (which are generated by default now since relaxed\natomics fuzzing was enabled), because V8 requires \n--experimental-wasm-acquire-release flag for them, and this flag was\nnot in the hardcoded list.\n\nThis CL fixes this by reading the flags from the generated flags file\nto faithfully simulate how ClusterFuzz runs V8."
    },
    {
      "commit": "84ace4aa2cab2fed7b2fd12a1e91e5a2ce342811",
      "tree": "af1f8d13362c4ab9bd9e4393aaaf32a2862d5033",
      "parents": [
        "17a90787bae4f4544e25b3e7833da076e0d543de"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu May 21 15:44:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 15:44:56 2026"
      },
      "message": "PrintBoundary: Handle types for all externable things (#8739)\n\nThe old code gave memories, tables, and tags, a null Type as a\nplaceholder. But that actually crashes in printing. This adds a proper type for each."
    },
    {
      "commit": "17a90787bae4f4544e25b3e7833da076e0d543de",
      "tree": "709b9886623f1d5c72a704b8ec0feb5f79182784",
      "parents": [
        "355af661ff7e9370685f674df0894aebb9877d18"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 20 23:03:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 23:03:27 2026"
      },
      "message": "MarkJSCalled pass (#8733)\n\nThis adds `@binaryen.js.called` to functions called from any\n`configureAll`, even one not from the start function.\n\nAddresses the issue in #8727, where fuzzing the start function can lead\nto situations where a function is referred to from configureAll but not\nmarked as js-called, which can break optimizations. By using this in the\nfuzzer, we can fuzz even files with interesting configureAll calls."
    },
    {
      "commit": "355af661ff7e9370685f674df0894aebb9877d18",
      "tree": "295f15ceaf33aca4b792571a15fefff5495573bf",
      "parents": [
        "f3e100813546dc5b5d87ee05015e582f85116468"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed May 20 22:07:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 22:07:02 2026"
      },
      "message": "[NFC] Return optional in Lexer::peek (#8737)\n\nThis prevents errors where we peek the buffer without checking that\nthere is more input to peek at."
    },
    {
      "commit": "f3e100813546dc5b5d87ee05015e582f85116468",
      "tree": "77bec04dd9d30f13bc608b9960603768b3d8b60b",
      "parents": [
        "072bcc4df2869a013609ba5941c51e960cdfede8"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed May 20 21:04:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 21:04:01 2026"
      },
      "message": "Fix OOB errors in the lexer (#8734)\n\nFix an OOB string_view access that was just trying to get a\none-past-the-end pointer. Fix two locations where we could have been\npeeking empty input.\n\nFixes #8732."
    },
    {
      "commit": "072bcc4df2869a013609ba5941c51e960cdfede8",
      "tree": "341919104ffb07c88181659b32152f55db27c75e",
      "parents": [
        "7ac78f76ffd988605b11f5493a1074480d92a86c"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 20 17:18:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 17:18:29 2026"
      },
      "message": "[wasm-split] Do not split out the start function (#8711)\n\nLike imports, automatically keep it in the primary module."
    },
    {
      "commit": "7ac78f76ffd988605b11f5493a1074480d92a86c",
      "tree": "c5221fa7823343880461e2ee550de4e27e74bdcf",
      "parents": [
        "dd958c220e19c63054d2122037d9dec04ddf21e6"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 20 16:02:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 16:02:25 2026"
      },
      "message": "Fuzzer: Export tags (#8729)\n\nThis is the only exportable thing we did not already export."
    },
    {
      "commit": "dd958c220e19c63054d2122037d9dec04ddf21e6",
      "tree": "3de2acfc091dd8abf610447ea85e931f6270bc25",
      "parents": [
        "8e2e403604b1ed11b53f7a88b233f5994413635e"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed May 20 16:02:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 16:02:11 2026"
      },
      "message": "wasm-ctor-eval: Remove the start function when we succeed (#8702)\n\nIf we remove even one ctor that we were asked to, then we ran the start\nfunction, and we evalled it too (if it trapped or such, we would not\nhave managed to eval that one ctor). But we left the start function there,\nwhich meant it would run again, even though we evalled it and baked its\nresults into the wasm already.\n\nBasically, the start function is like a ctor, and after evalling it\nsuccessfully we need to empty it out, so it doesn\u0027t re-execute, or else we would be\nchanging the program behavior."
    },
    {
      "commit": "8e2e403604b1ed11b53f7a88b233f5994413635e",
      "tree": "b8511fd548b83883e8b8292ff303f5ddd86757ca",
      "parents": [
        "c82a630d5ad354eb2225e40b2563489c4b70524f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed May 20 15:56:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 15:56:02 2026"
      },
      "message": "Run non-nullable local fixups when reducing functions (#8730)\n\nIt\u0027s not entirely clear how FunctionReplacer was producing IR that with\ninvalid nullable locals, but this was observed in practice in issue\n#8720. Fix it by running the non-nullable local fixups after the pass.\n\nFixes #8720."
    }
  ],
  "next": "c82a630d5ad354eb2225e40b2563489c4b70524f"
}
