)]}'
{
  "log": [
    {
      "commit": "55dff6b2430aee4fee7e5cf748af07222b079742",
      "tree": "3ff9cc350aca21fc00b8644f92248247267bcd85",
      "parents": [
        "0c633e76d977ad82f475254ae690a1002e9b87f6"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 28 05:15:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 05:15:51 2026"
      },
      "message": "Remove use of std::aligned_storage. NFC (#8942)\n\nThis is deprecated in C++23. See\nhttps://github.com/llvm/llvm-project/pull/94169\n\nThis also allows us to remove the `/D_ENABLE_EXTENDED_ALIGNED_STORAGE`\nfrom `CMakeLists.txt` which was originally added back in e8ac331501.\nBack then we also used in this in `src/mixed_arena.h` but that usage was\nremoved in #1846."
    },
    {
      "commit": "0c633e76d977ad82f475254ae690a1002e9b87f6",
      "tree": "2a767e972fc2f3a7737391e4973a3ee8050ab94c",
      "parents": [
        "84529ec807ced4e7db3fc4bff8d517ca20d59759"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Jul 28 04:34:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 04:34:32 2026"
      },
      "message": "Remove deprecated instruction mneumonics (#8941)\n\nSpecifically, remove `extern.externalize`, `extern.internalize`, and the\n`cast_desc` instructions that have been replaced with `cast_desc_eq`."
    },
    {
      "commit": "84529ec807ced4e7db3fc4bff8d517ca20d59759",
      "tree": "fee834ac4d2624bb71f51ac03b7fcd2aba3e5f84",
      "parents": [
        "51db22337dea271c580414c39f6fe02398a533e7"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jul 24 23:28:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 23:28:51 2026"
      },
      "message": "Fuzzer support for br_on_cast_desc_eq (#8935)\n\nWhen we would generate a br_on_cast or br_on_cast_fail for a type that\nhas a descriptor, sometimes generate a br_on_cast_desc_eq or\nbr_on_cast_desc_eq_fail instead. Fix a validation bug newly found by the\nfuzzer."
    },
    {
      "commit": "51db22337dea271c580414c39f6fe02398a533e7",
      "tree": "166b29f8ffaf859c44c6063ed6cbec215a3e6b88",
      "parents": [
        "ad13059866f26f7ece55fd754f6196c90b0d5faa"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jul 24 22:02:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 22:02:18 2026"
      },
      "message": "Opportunisticly emit compact imports (#8926)\n\nIn the binary writer when compact imports are enabled, opportunistically\nlook for pairs of adjacent imports that share both their module names\nand import types, or alternatively just their module names. When a pair\nof matching imports is found, create a run of compact imports that\nincludes as many subsequent imports as possible. Adding a pass that will\nreorder imports to purposefully put similar imports together is left as\nfuture work."
    },
    {
      "commit": "ad13059866f26f7ece55fd754f6196c90b0d5faa",
      "tree": "e45b4061d3118ef1a37eb381d7fce389c65e78ba",
      "parents": [
        "2e035664a74d90f6a5365d6461e23488481bb72a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 24 20:20:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 20:20:54 2026"
      },
      "message": "ConstraintAnalysis: Add AND fusing of { x \u003c\u003d C \u0026\u0026 x \u003c C } \u003d\u003e x \u003c C  (#8937)\n\nThis is common in loops, where after we increment, we apply a bound."
    },
    {
      "commit": "2e035664a74d90f6a5365d6461e23488481bb72a",
      "tree": "3dbf313aaa3bdf81b49581c6e6b0f20601460d83",
      "parents": [
        "87da91d0d94807335a00ff8c6d651b9747c3318b"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jul 24 18:23:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 18:23:40 2026"
      },
      "message": "Parse text format for compact import sections (#8925)\n\nUpdate the parser for imports to support both forms of compact imports.\nBecause imports are no longer 1:1 with import statements, the locations\nof imported items the parser collects and re-parses in various phases\nmust now be the locations of importdesc productions rather than import\nproductions."
    },
    {
      "commit": "87da91d0d94807335a00ff8c6d651b9747c3318b",
      "tree": "a455b6ca24126d79ee12c622147caca29c317343",
      "parents": [
        "0a7b1713b9e17be07d4239af069e6005065edaf2"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 24 18:13:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 18:13:47 2026"
      },
      "message": "ConstraintAnalysis: Add OR fusing of { x \u003d\u003d C || x \u003e C } \u003d\u003e x \u003e\u003d C (#8936)\n\nThis is common in loops, where there is an initial value + a backedge\nthat has an incremented but bounded value.\n\nTo implement this, add full expansion of the OR of two AndedConstraintSets\ninto ANDs of the ORs of all their elements, and thorough checking there."
    },
    {
      "commit": "0a7b1713b9e17be07d4239af069e6005065edaf2",
      "tree": "7974eff5fc7df2efd1ea75ea33e46cb920732fb9",
      "parents": [
        "bbeae83f84559bae4d5bfd5207a23dfbbb6495c5"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Thu Jul 23 23:57:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 23:57:07 2026"
      },
      "message": "Updated waitqueue support (#8672)\n\nPart of #8315. Implements the updated design from\nhttps://github.com/WebAssembly/shared-everything-threads/blob/main/proposals/shared-everything-threads/Overview.md#managed-waiter-queues\n/ https://github.com/WebAssembly/shared-everything-threads/pull/110.\nAlso see the discussion in\nhttps://github.com/WebAssembly/shared-everything-threads/issues/102.\nThis PR implements struct.wait for i32 fields only at the moment (like\nin V8).\n\nBinary constants are not spec\u0027ed yet and taken from\nhttps://chromium-review.googlesource.com/c/v8/v8/+/7790723.\n\nRemaining after this PR:\n* struct.wait for any field that is `eqref`\n* Fuzzer support (generating instructions that are guaranteed not to\nblock)."
    },
    {
      "commit": "bbeae83f84559bae4d5bfd5207a23dfbbb6495c5",
      "tree": "58a45c047e3278c77db68ee82fc7d33f2ba75fc0",
      "parents": [
        "e88a1b545f30b8e8ef7c9d1beeda70d5534c3077"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jul 23 17:50:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 17:50:35 2026"
      },
      "message": "[NFC] Track grammar of definitions in parser (#8931)\n\nWhen e.g. a function is declared in the text format, it can either be\nwith a normal `func` production (which may or may not have an inline\nimport declaration) or it can be an `import` production. Previously the\nparser would just store the location of the declaration but not the kind\nof production it used. In later parser phases where the declaration has\nto be parsed again, we would just try both productions to see which one\nworked. This is rather hacky and brittle and will not play nicely with\nthe text format for compact imports, so refactor to explicitly track how\nthe declaration should be parsed."
    },
    {
      "commit": "e88a1b545f30b8e8ef7c9d1beeda70d5534c3077",
      "tree": "96c57367c00324a927bc1cfe25946d8261bc8fdd",
      "parents": [
        "a54b20b51a6182d4b5728b6f8b94005fb00fccbf"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Thu Jul 23 16:55:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:55:10 2026"
      },
      "message": "[multibyte] Expand array load and store validation (#8929)\n\nExpand array load and store validation to all numeric, vector, and\npacked element types (i8, i16, i32, i64, f32, f64, v128), as well as\noffset and alignment immediates.\n\nMultibyte array operations apply to numeric and vector array backing\ntypes. This permits loads from mutable and immutable arrays while\nenforcing mutability on stores, rejecting non-numeric arrays, and\nvalidating offset and alignment immediates."
    },
    {
      "commit": "a54b20b51a6182d4b5728b6f8b94005fb00fccbf",
      "tree": "267c1383240825bb07ae04b395c5e50cd4b53194",
      "parents": [
        "355863c2168e3cc11bf3cf3644985d2f4487dd89"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Jul 23 15:58:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:58:29 2026"
      },
      "message": "ConstraintAnalysis: Add inequality comparisons to constants (#8924)\n\nWhen seeing if `x \u003d\u003d C` proves `x \u003e\u003d D`, we can just apply `C \u003e\u003d D`.\n\nAnd, in reverse, `x \u003e\u003d D` may imply `x !\u003d C` if `C \u003c D`."
    },
    {
      "commit": "355863c2168e3cc11bf3cf3644985d2f4487dd89",
      "tree": "49c0535099b5901dcb407dfcca70f79b98646ca5",
      "parents": [
        "cdf3bfc51cbaaf784999c267cb33e09cb188007e"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jul 22 23:53:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 23:53:02 2026"
      },
      "message": "Re-enable fuzzing for relaxed atomics (#8930)\n\nPart of #8904. Reverts #8909. V8 updated according to\nhttps://github.com/WebAssembly/relaxed-atomics/issues/3\n[link](https://chromium-review.googlesource.com/c/v8/v8/+/8110620), so\nBinaryen and V8 have the same bit interpretation again."
    },
    {
      "commit": "cdf3bfc51cbaaf784999c267cb33e09cb188007e",
      "tree": "cab8516a74c89941de81e07fec6e5b733fdd1232",
      "parents": [
        "acf302c4ea3b3b36b3e2e0892a9f6be25d2ea04c"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jul 22 23:20:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 23:20:54 2026"
      },
      "message": "Fix type updating for indirect call effects (#8874)\n\nPart of #8615. Fixes #8833 which was wrong. The earlier fix never\ntouched `newTypeEffects` at all. It passed tests and fixed the breakage\nonly incidentally by being maximally conservative and losing all\nindirect call effects in the case of a type update. Fix this logic and\nadd unit tests to vet this code better.\n\nDrive-by fixes:\n* Clear indirectCallEffects during --discard-global-effects, before\nrecomputing global effects, and if a pass\u0027s `addsEffects()` is true.\nClearing it when recomputing global effects is necessary to remove stale\nentries for types that no longer exist after type rewriting (although it\nshould make no difference to optimizations).\n* Fix use-after-free in tests due to static storage of HeapTypes / Types\n+ destroyAllTypesForTestingPurposesOnly. The static HeapType / Type in\n`getMutI8Array` and similar functions referred to an index in\n`globalHeapTypeStore` / `globalTupleStore`, which gets cleared in unit\ntests with `destroyAllTypesForTestingPurposesOnly()`, causing the index\nto refer to garbage. Change these to not use static storage so that\nthey\u0027re always in sync with `globalHeapTypeStore` / `globalTupleStore`.\n* More changes to support gmock. #8879 partially addressed this but I\nstill hit some linker errors when adding new test code using gmock. The\nissue is that the earlier PR didn\u0027t change anything when BUILD_FUZZTEST\nis false."
    },
    {
      "commit": "acf302c4ea3b3b36b3e2e0892a9f6be25d2ea04c",
      "tree": "0684bfd3b99d4a5a0aa0478ca1ca900d2ba02d5e",
      "parents": [
        "108e796b9b0450e30f510a2f86974f6d4809e600"
      ],
      "author": {
        "name": "Brendan Dahl",
        "email": "brendan.dahl@gmail.com",
        "time": "Wed Jul 22 21:47:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 21:47:24 2026"
      },
      "message": "[multibyte] Support offset and align for array load and store (#8923)\n\nAdd offset and alignment immediates to ArrayLoad and ArrayStore AST\nnodes, text format, and binary encoding.\n\nMultibyte array access operations in the WebAssembly GC spec reuse\nmemarg immediates to specify a static byte offset and alignment hint.\nThis adds support for parsing, printing, and binary reading/writing of\nthese attributes for array load and store instructions."
    },
    {
      "commit": "108e796b9b0450e30f510a2f86974f6d4809e600",
      "tree": "0a0ae64d7c0342782e573f02b6320353ebd4750d",
      "parents": [
        "c7ae8fbdd09831c607625f9541c0e9301763548a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jul 21 18:00:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 18:00:12 2026"
      },
      "message": "ConstraintAnalysis: Track relevant locals (#8921)\n\nBy avoiding work on irrelevant locals - ones we can\u0027t prove anything for\n- we make the pass 20% faster (at the cost of requiring another cycle, in\nvery rare cases)."
    },
    {
      "commit": "c7ae8fbdd09831c607625f9541c0e9301763548a",
      "tree": "c4a12f2525a09328e74faf38a110566292e0143c",
      "parents": [
        "74ff1eb9cc8393f16854014667e540a3ba883b97"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jul 21 15:47:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 15:47:55 2026"
      },
      "message": "wasm-ctor-eval: Do not try to flatten segments with huge offsets (#8920)\n\nFirst, we used 32-bit math, which overflowed. Second, even with that, we\nshould not generate huge segment sizes, which just OOM, so set a limit\nof 4GB (arbitrary)."
    },
    {
      "commit": "74ff1eb9cc8393f16854014667e540a3ba883b97",
      "tree": "c01baadebafa45432f0637f299b8fc8147e43cb0",
      "parents": [
        "e273451a2cda8acf2875ba84417f9c45b7c979e3"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Tue Jul 21 15:20:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 15:20:01 2026"
      },
      "message": "Cleanup shared constants. NFC (#8922)\n\n- Remove some unused shared constants.\n- For constants that are only used in a single file move them there\n- Be consistent about how static Names are initialized."
    },
    {
      "commit": "e273451a2cda8acf2875ba84417f9c45b7c979e3",
      "tree": "fe589c6c63a0363a62fae8b839c9c946a1e04e0d",
      "parents": [
        "04bed6a0f86d4bd9d16aecd3b9337a406448658d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jul 20 17:02:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:02:50 2026"
      },
      "message": "[NFC] ConstraintAnalysis: Avoid a copy when there are no interesting branch constraints (#8919)\n\nRather than always copy the constraints, then modify them when we have\nsomething interesting, only copy when we do have something interesting.\n\nThis makes the pass 15% faster."
    },
    {
      "commit": "04bed6a0f86d4bd9d16aecd3b9337a406448658d",
      "tree": "8f12948dd16f90c9216754f85fd30438c2eccc28",
      "parents": [
        "9563498db90252316b04164884f2c4f66d254cb9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jul 20 16:07:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:07:40 2026"
      },
      "message": "ConstraintAnalysis: Return a bool from approximateOr (#8913)\n\nRequires a little care to get the ordering right, but worth it for speed."
    },
    {
      "commit": "9563498db90252316b04164884f2c4f66d254cb9",
      "tree": "33222650fb9fa27be680bac728237c291d540d9e",
      "parents": [
        "acfdce94eae7c3ab365a659e4451dc0d7467d87f"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Mon Jul 20 14:28:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 14:28:56 2026"
      },
      "message": "Update DAE_STATS to handle results (#8914)\n\nReport the number of removed results in both DAE and DAE2. Refactor DAE2\nso that the main graph traversal and the DAE_STATS graph traversals use\nthe same logic, reducing duplication and improving confidence that the\nreported stats are correct. Also report a few extra available\nmeasurements in DAE2."
    },
    {
      "commit": "acfdce94eae7c3ab365a659e4451dc0d7467d87f",
      "tree": "54e29522b640f2fdfe55567d98b534c6fb779290",
      "parents": [
        "17ed400b7b0c8c738bbd4ddf7208af4f8df9f475"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Sat Jul 18 00:34:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 00:34:13 2026"
      },
      "message": "[support] ParentIndexIterator: Add subscript and friend plus operators (#8916)\n\n`ParentIndexIterator` declares `using iterator_category \u003d`\n`std::random_access_iterator_tag;`, but did not provide the subscript\noperator (`operator[]`) or friend commutative addition (`friend\noperator+(difference_type, const ParentIndexIterator\u0026)`).\n\nWhen #8912 introduced `std::sort(begin(), end())` on\n`AndedConstraintSet` (which inherits from `inplace_vector`), building\n`binaryen` failed on the Chromium `emscripten-releases` macOS builders\nwith:\n\n```\n  error: type \u0027wasm::inplace_vector\u003c...\u003e::Iterator\u0027 does not provide a subscript operator\n```\n\nThis failure did not show up on Binaryen\u0027s CI because `libstdc++`\nimplements `std::sort` using pointer/iterator addition and dereferencing\n(`*(first + child)`). In contrast, on macOS with `-stdlib\u003dlibc++`,\n`libc++` implements `std::sort` (`std::__sift_down`) using\n`__first[__child]` and `__first[__start]`, which requires `operator[]`.\n\nThis commit adds `decltype(auto) operator[]` and `friend operator+` to\n`ParentIndexIterator` to satisfy `RandomAccessIterator` requirements."
    },
    {
      "commit": "17ed400b7b0c8c738bbd4ddf7208af4f8df9f475",
      "tree": "b5ee3b6c02243ae82188f1a3734956db6fb3bad2",
      "parents": [
        "ebd74547228cffaf20e5609e600e40cdcce7ed61"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 17 23:07:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 23:07:39 2026"
      },
      "message": "[test] Improve run_example_tests. NFC (#8918)\n\nUse unique names for object files as well as output files.\n\nBecause we are writing the files to the out/test directory no need to\nclean them up after.   Better to leave them around for future\ninspection.\n\nAlso, rename `extra` to `compile` since this is the compile command for\nthe object file."
    },
    {
      "commit": "ebd74547228cffaf20e5609e600e40cdcce7ed61",
      "tree": "fe00afc820a8f4702887f43e3c309dbaa4a35290",
      "parents": [
        "64e066e9ed2b32cd5852e544d90606ed47474867"
      ],
      "author": {
        "name": "Sam Clegg",
        "email": "sbc@chromium.org",
        "time": "Fri Jul 17 19:11:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:11:40 2026"
      },
      "message": "[cmake] Simplify C++ standard enforcement using target_compile_features (#8915)\n\nRequire C++20 directly on the `binaryen` target by adding\n`cxx_std_20` to `target_compile_features`. This enables CMake to\nautomatically enforce that the compiler supports C++20 and propagates\nthe requirement to all consumers linking against `binaryen`.\n\nRemove the manual `elseif(CMAKE_CXX_STANDARD LESS ...)` check and error\nmessage from `CMakeLists.txt` since CMake now natively handles standard\nvalidation and error reporting.\n\nAlso remove the `if(NOT CMAKE_CXX_STANDARD)` condition around\n`set(CMAKE_CXX_STANDARD 20)` and its explanatory comment. The old\ncomment suggested the conditional allowed embedding in parent projects\nwith a higher default standard. However, variable assignments like\n`set(CMAKE_CXX_STANDARD 20)` in a subdirectory (via `add_subdirectory`)\nare strictly directory-scoped and do not leak into the parent project.\nFurthermore, with `target_compile_features` enforcing `cxx_std_20` on\n`binaryen`, any parent target linking against `binaryen` at a higher C++\nstandard (e.g., C++23) cleanly satisfies the feature requirement.\nTherefore, unconditionally setting `CMAKE_CXX_STANDARD 20` for internal\nBinaryen targets is completely safe and avoids inheriting incompatible\nstandards (\u003c 20) from parent projects."
    },
    {
      "commit": "64e066e9ed2b32cd5852e544d90606ed47474867",
      "tree": "88568c108b87bc3f007902b89dee49c05ad9f5be",
      "parents": [
        "1377e422f5210a4d75a76c1e2c6f5941a1004a70"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Fri Jul 17 14:23:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 14:23:21 2026"
      },
      "message": "Remove unused results in DAE2 (#8903)\n\nExtend DeadArgumentElimination2.cpp to track and eliminate unused\nfunction return values in addition to dead parameters.\n\nGeneralize the analysis graph by introducing a unified `Location`\nvariant that handles both parameter and result locations across\nfunctions and function type trees (`FuncResultLoc` and `TypeResultLoc`).\nExtend value-flow tracking to follow return values flowing into function\nreturns, including tracking tail calls (`tailCallees` and\n`tailCalleeTypes`) so that result usage constraints propagate correctly\nfrom callees to tail-callers.\n\nUpdate the fixed-point solver to propagate result usage bidirectionally\nacross function implementations and type trees. When a function or type\nresult is determined to be unused, update its signature result to\n`Type::none` during type rewriting and strip the return expressions and\ncall site result types during optimization."
    },
    {
      "commit": "1377e422f5210a4d75a76c1e2c6f5941a1004a70",
      "tree": "23e2dd0c009e8de7f87f455994039a81532858fb",
      "parents": [
        "74c39b9bc3e518e1af327f33b9afb4c2ae38c4db"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 17 14:09:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 14:09:44 2026"
      },
      "message": "ConstraintAnalysis: Remove older redundant constraints (#8912)\n\nIf we know `x !\u003d 1` and we are told `x \u003d\u003d 0`, then we can forget about\n`x !\u003d 1` and just store `x \u003d\u003d 0` (which implies `x !\u003d 1`)."
    },
    {
      "commit": "74c39b9bc3e518e1af327f33b9afb4c2ae38c4db",
      "tree": "53f70e4264c3c0f1c99ec1a3d8a279bbac271f0d",
      "parents": [
        "1f903c14babf829745b421b92ff0f286e93e4209"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 15 20:24:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 20:24:40 2026"
      },
      "message": "ConstraintAnalysis: Sort constraints internally (#8900)\n\nSorting them in each set of ANDed constraints is not only nice for\ndebugging but makes comparison simpler: they compare equal\nregardless of order.\n\nThis adds some boilerplate `operator\u003c` in necessary places."
    },
    {
      "commit": "1f903c14babf829745b421b92ff0f286e93e4209",
      "tree": "d11af9a4316ba4cbfbba86fde14acb0450387628",
      "parents": [
        "892d2f6ff81a68164b75b190dcac23f7a5367aaf"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 15 19:10:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 19:10:52 2026"
      },
      "message": "Version 131 (#8908)"
    },
    {
      "commit": "892d2f6ff81a68164b75b190dcac23f7a5367aaf",
      "tree": "ea4f365e0d20ef1c805bf3fa287f525b2a6540e2",
      "parents": [
        "7f87fefad8f89f0954f992b23835a5c9135eb0ee"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jul 15 18:50:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 18:50:22 2026"
      },
      "message": "Disable fuzzing for relaxed atomics (#8909)\n\n#8905 made a breaking change to the binary format for relaxed atomics +\nmultibyte array access which hasn\u0027t been done in V8 yet.\n\nThis is mostly a revert of #8664, except that relaxed atomics is left\nenabled in FUZZER_ARGS\n([link](https://github.com/WebAssembly/binaryen/blob/578db5d8ada17bcb2f5ecee60f9049a2b68516fa/scripts/clusterfuzz/run.py#L83)),\nsince other fuzzing targets (e.g. Binaryen) still support the changed\nbinary representation.\n\nPart of #8904."
    },
    {
      "commit": "7f87fefad8f89f0954f992b23835a5c9135eb0ee",
      "tree": "f044cd186142728bceeacb18a396ff82cb8efded",
      "parents": [
        "684559c854f612ac6591d687847a677e43757e96"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jul 15 17:06:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 17:06:39 2026"
      },
      "message": "Swap memarg bit for HasBackingArrayMask and HasMemoryOrderMask (#8905)\n\nFixes #8904. See\nhttps://github.com/WebAssembly/relaxed-atomics/issues/3."
    },
    {
      "commit": "684559c854f612ac6591d687847a677e43757e96",
      "tree": "54d8124ab6c1870f229393044ac12a03fffc5d07",
      "parents": [
        "2de84ed256244558e2c8de81bc13ff9ee913f082"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 15 16:12:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 16:12:49 2026"
      },
      "message": "[StackSwitching] CFG: Fix basic blocks around Resume (#8907)\n\nResumes can branch, so we need to start a new basic block there, just\nlike with `br_if` and `br_on` etc."
    },
    {
      "commit": "2de84ed256244558e2c8de81bc13ff9ee913f082",
      "tree": "d0d6d106e3c0690a319800419fe92700dc51b16c",
      "parents": [
        "50181d7e7a8df998f7c15b3c331f0eda615f23d6"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 15 15:51:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 15:51:34 2026"
      },
      "message": "ConstraintAnalysis: Handle contradictions we find during other work (#8906)\n\nWe may find the contradiction while flipping or applying another local\u0027s\nconstraints, see the testcase. We just need to notice when we find a\ncontradiction and stop there, as further work will hit other assertions\n(on us not doing stuff when already unreachable)."
    },
    {
      "commit": "50181d7e7a8df998f7c15b3c331f0eda615f23d6",
      "tree": "7b3200a7965c5c52a69ce23f686729c6ab722f3a",
      "parents": [
        "a3f1bc05f4e501fa75b7dc4f70e48b6bdd73f910"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Wed Jul 15 09:21:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 09:21:07 2026"
      },
      "message": "[NFC] use wasm module in analysis::CFG::fromFunction (#8902)\n\nFollow up PR of https://github.com/WebAssembly/binaryen/pull/8897\nUse the `CFG::fromFunction(func, wasm)` to receive module context so CFG\ntraversal"
    },
    {
      "commit": "a3f1bc05f4e501fa75b7dc4f70e48b6bdd73f910",
      "tree": "9fbc41185fae32009b12419ca6818f1b24ada4f4",
      "parents": [
        "c839180673de61025b401f3d536dbcbeff890579"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jul 14 15:49:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 15:49:49 2026"
      },
      "message": "Fuzzer: Fix 64-bit max memory sizes, and add more variety (#8899)\n\nThe old code assumed a 32-bit memory size.\n\nAlso, we unconditionally added room to grow, now we only do so 50% of\nthe time."
    },
    {
      "commit": "c839180673de61025b401f3d536dbcbeff890579",
      "tree": "c633f4f479d966befac276f566cf41d5f5e6f6b4",
      "parents": [
        "9cb9f39e4fd8255aa7cb3fd28b875cb949126d57"
      ],
      "author": {
        "name": "Derek Schuff",
        "email": "dschuff@chromium.org",
        "time": "Tue Jul 14 14:26:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 14:26:00 2026"
      },
      "message": "Allow atomic operations on non-shared memory in SafeHeap (#8890)\n\nSafeHeap needs to generate atomic helper functions even if the memory\nis not shared, because atomic instructions can still be used when\nthreads feature is enabled.\n\nAlso, removed the now-unused \u0027shared\u0027 parameter from\nisPossibleAtomicOperation, added a test case, and updated existing\ntests."
    },
    {
      "commit": "9cb9f39e4fd8255aa7cb3fd28b875cb949126d57",
      "tree": "eef3155e8a0866cae15b4c52df99e74f51390f7b",
      "parents": [
        "99f6fc6315d0ae27740211be23b55c9845d504cd"
      ],
      "author": {
        "name": "Chris Harvey",
        "email": "1362083+chharvey@users.noreply.github.com",
        "time": "Tue Jul 14 09:29:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 09:29:16 2026"
      },
      "message": "Merge `Module[\u0027parseTextWithFeatures\u0027]` into `Module[\u0027parseText\u0027]` (#8901)\n\ndeletes `Module[\u0027parseTextWithFeatures\u0027]` in favor of\n`Module[\u0027parseText\u0027]` with an optional `features` parameter.\n\nAny code calling the former should update accordingly.\n\nFollow-up to\nhttps://github.com/WebAssembly/binaryen/pull/8872#discussion_r3562364680"
    },
    {
      "commit": "99f6fc6315d0ae27740211be23b55c9845d504cd",
      "tree": "c28bf5323b0cd47e6474d1acfd0b415335b77f28",
      "parents": [
        "e2712b619fd269a6df304f2e6f0b8910d0b9a190"
      ],
      "author": {
        "name": "Jacky Li",
        "email": "86073892+JPL11@users.noreply.github.com",
        "time": "Mon Jul 13 23:55:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 23:55:27 2026"
      },
      "message": "Report a host limit for memories too large for the shell to allocate (#8898)\n\nFixes the fuzzer finding from #8882 (comment): a maximal memory64 (2^48\npages, exactly 2^64 bytes) hit `shellMemory.resize(memory-\u003einitial \u003c\u003c\nmemory-\u003epageSizeLog2)` in the shell interface, where the byte size\nwrapped to 0. Instantiation then \"succeeded\" with an empty buffer, and\nevery memory access spuriously trapped as out of bounds, including the\n`memory.init` of active segments during startup. When an optimization\nlegitimately removes such an access (MemoryPacking dropping a provably\nin-bounds zero segment), the spurious trap disappears and the fuzzer\nsees a behavior change.\n\nThe fix reports a host limit at instantiation when the byte size is\nunrepresentable or the allocation fails, like a real VM whose\ninstantiation fails. This slots into existing machinery: `growMemory`\nalready applies a size limit, and the fuzz-exec harness already catches\n`HostLimitException` during instance creation and excludes such runs\nfrom comparison, precisely because optimizations can change whether a\nhost limit is reached.\n\nWith this, the reproducer prints `[host limit memory too large]` both\nbefore and after `--memory-packing`, so there is no differential. Added\nas a lit test under `test/lit/exec/`."
    },
    {
      "commit": "e2712b619fd269a6df304f2e6f0b8910d0b9a190",
      "tree": "46b361682c7d8280d890849a1b793f6253357376",
      "parents": [
        "48858e8db9d89bf0218c3eaa0b1cd11b2c052040"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jul 13 22:51:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 22:51:15 2026"
      },
      "message": "RemoveUnusedModuleElements: Handle null table segments (#8884)\n\nWhen an elem segment has a null, we must keep it around as it may be\nneeded to cause the program to trap (if it overwrites a function that\nwould not have trapped, had it been called)."
    },
    {
      "commit": "48858e8db9d89bf0218c3eaa0b1cd11b2c052040",
      "tree": "2c138c1910a397cf9d2e37cf9b2af8a83f88ed30",
      "parents": [
        "6c1ca53b89323b6787562b0004bdf49628ccbd34"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jul 13 22:28:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 22:28:28 2026"
      },
      "message": "ConstraintAnalysis: Fix Pops and non-nullable LocalSets (#8895)\n\nWe cannot just remove such IR, even if unreachable. Use\n`getDroppedChildrenAndAppend` and also run EH fixups."
    },
    {
      "commit": "6c1ca53b89323b6787562b0004bdf49628ccbd34",
      "tree": "c003402fb28e96f7defe1d8b755caf2b42f656e6",
      "parents": [
        "1517ea948c09455502ba45ee3f26ea06fb2b7542"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jul 13 16:46:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 16:46:35 2026"
      },
      "message": "Heap2Local: Handle unreachable code in adjustTypeFlowingThrough (#8892)\n\nIf the type is unreachable, we must not change it."
    },
    {
      "commit": "1517ea948c09455502ba45ee3f26ea06fb2b7542",
      "tree": "054ab0bc10cd3606bbe9c49199d0744c28e771b4",
      "parents": [
        "5d050e793d277f0053efc56f94d686160fab416a"
      ],
      "author": {
        "name": "Changqing  Jing",
        "email": "changqing.jing@bmw.com",
        "time": "Mon Jul 13 08:43:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 08:43:36 2026"
      },
      "message": "[NFC] Add module context to CFG construction (#8897)\n\nAllow analysis CFG creation to receive module context so CFG traversal\ncan respect module features when building control flow."
    },
    {
      "commit": "5d050e793d277f0053efc56f94d686160fab416a",
      "tree": "f7df2cbd55b676dd236353617c386933c87e58db",
      "parents": [
        "c01b697a464b5fdf73f0a2ca07fd92e6c52aedcb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 10 20:51:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 20:51:42 2026"
      },
      "message": "ConstraintAnalysis: Fix some trivial asserts (#8893)"
    },
    {
      "commit": "c01b697a464b5fdf73f0a2ca07fd92e6c52aedcb",
      "tree": "00a5e27a4340589fe44c239c8ff2bcee893f84f1",
      "parents": [
        "db30c15f6f0a83950c802411ab11ecfe24c8d8df"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 10 20:38:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 20:38:50 2026"
      },
      "message": "wasm-reduce: Fix up EH nested pops when adding blocks (#8894)"
    },
    {
      "commit": "db30c15f6f0a83950c802411ab11ecfe24c8d8df",
      "tree": "d6f2b52cd650eeaa155c6a69881ad9bde6f0a9dd",
      "parents": [
        "21822346a32cc5f97661781e407d929fe2bb5ba3"
      ],
      "author": {
        "name": "Jacky Li",
        "email": "86073892+JPL11@users.noreply.github.com",
        "time": "Fri Jul 10 18:33:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:33:14 2026"
      },
      "message": "MemoryPacking: Optimize overlapping segments on imported memories when provably in-bounds (#8882)\n\nFollow-up to #8834, implementing the TODO added there at @tlively\u0027s\nsuggestion.\n\nWhen active segments overlap and the memory is imported, the pass gave\nup entirely: a later out-of-bounds segment traps mid-instantiation and\nleaves the partially-written state visible in the imported memory (which\noutlives the failed instantiation), so even trampled data mattered.\n\nHowever, if every active segment is provably in bounds of the memory\u0027s\ndeclared minimum size, no segment can trap during instantiation at all.\nInstantiation then always applies every segment, only the final memory\ncontents are observable, and we can zero out trampled data exactly as we\ndo for a memory defined in the module.\n\nThis is intentionally coarser than the full condition in the TODO (only\nthe segments after a trampled segment, up to and including its trampling\nsegment, need to be provably in-bounds): that would require tracking\nwhich coverage is usable per trampled byte, and the all-in-bounds case\nis the one that occurs in practice. The TODO is updated to describe the\nremaining refinement, and a test documents the conservative case.\n\nAlso removes the dead `maxAddress` computation in `canOptimize` (it has\nbeen unused for a while).\n\nNew tests cover: in-bounds trampling now optimized (zero and nonzero\ntramplers), a possibly-out-of-bounds trampler still bailing, and the\nconservative unrelated-out-of-bounds case."
    },
    {
      "commit": "21822346a32cc5f97661781e407d929fe2bb5ba3",
      "tree": "a7d88244857089d75bd330268da1eb4976d2859e",
      "parents": [
        "69d28ed6b8b1bdc0973124b01f0f1e04683a059a"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Fri Jul 10 17:51:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 17:51:53 2026"
      },
      "message": "ConstraintAnalysis: Add inequality parsing (#8891)\n\nWe now parse `i32.lt_s` and so forth.\n\nThis does not include full range analysis yet, so we don\u0027t infer\nties between `\u003c\u003d` and `\u003c` for example, but this is already enough to\ninfer the precise inequalities we see, and their negations. This can handle\nthe simplest kinds of software bounds checks, more will be added later.\n\nAlso add proper printing of these opcodes."
    },
    {
      "commit": "69d28ed6b8b1bdc0973124b01f0f1e04683a059a",
      "tree": "15f1ea2b642d41464b0948980aa799d3926cd84a",
      "parents": [
        "21a717e8e8b3bc925b8f6e3a1c459b8d23df99cb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Jul 09 20:26:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 20:26:22 2026"
      },
      "message": "ConstraintAnalysis: Copy constraints when copying locals (#8888)"
    },
    {
      "commit": "21a717e8e8b3bc925b8f6e3a1c459b8d23df99cb",
      "tree": "ca27c2a331099b0efbdaadd2f1eee02aee12c63e",
      "parents": [
        "d36c95380579631ca83d99454b011a69e92e2213"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 08 20:53:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 20:53:33 2026"
      },
      "message": "ConstraintAnalysis: Do not add something already known to be true when ANDing (#8889)\n\nIf `X -\u003e Y` (X proves Y), then we can avoid adding Y when doing `X \u0026\u0026 Y`\n\n(Formally, if `Y -\u003e Z` (Y proves something useful Z) then `X -\u003e Y -\u003e Z`\nso X proves it already.)"
    },
    {
      "commit": "d36c95380579631ca83d99454b011a69e92e2213",
      "tree": "b4c29a52842c4e01e6299ce6aa66d50d98f0fd10",
      "parents": [
        "36446eb9ace9e61cab1aaa185be497945bbf224f"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Jul 07 23:01:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 23:01:11 2026"
      },
      "message": "Generate acqrel atomic.fence in fuzzer (#8885)\n\nPart of #8165."
    },
    {
      "commit": "36446eb9ace9e61cab1aaa185be497945bbf224f",
      "tree": "0088227a38a16b4a1a975ff5a23790926c4dec4d",
      "parents": [
        "6d767fff0d1aa9215105db0e190e53d709b659d5"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Jul 07 20:44:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 20:44:38 2026"
      },
      "message": "Fix fuzzer nondeterminism (#8886)\n\nFixes #8770. The fuzzer was non-deterministic across architectures since\nwe had two calls to `pick()` in the arguments to `makeAtomicRMW`, so the\nevaluation order of the two `pick` calls was non-deterministic. Fix this\nby pulling the function calls outside of the arguments of\n`makeAtomicRMW`.\n\nAlso increase the fuzz metrics test seed file size (2214 bytes -\u003e 1020\nKB) to increase the likelihood of catching similar issues in CI, and\nexercise more instructions in the test. This bug wasn\u0027t caught by CI in\n#8253.\n\nTested by basing #8885 on top of this which failed previously due to the\nnon-determinism, and now succeeds."
    },
    {
      "commit": "6d767fff0d1aa9215105db0e190e53d709b659d5",
      "tree": "6f467c3925648b1e86df8fb3d79a65d95b4aa915",
      "parents": [
        "b27f7e347edabb56d2954bc0a8f3183631f6769d"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jul 01 18:55:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 18:55:10 2026"
      },
      "message": "ConstraintAnalysis: Properly handle local changes (#8878)\n\nTrack references of a local among the constraints of the rest. When a\nlocal is updated, remove its stale references (claims about its old value no\nlonger hold).\n\nAlso, formalize how we represent info: when we see `x \u003d\u003d y`, we now\nstore that on both `x` and `y`, ensuring a single place where we can find all\nconstraints about a local."
    },
    {
      "commit": "b27f7e347edabb56d2954bc0a8f3183631f6769d",
      "tree": "c6d2f17dc29850fbdebcd38d373b1550c71925c3",
      "parents": [
        "8c3dfa2d66a8983bebe6f1b3460189ac048232a2"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Jul 01 18:46:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 18:46:11 2026"
      },
      "message": "Fix escaping of names in IR (#8880)\n\nThe binary reader (but not the text parser) would previous escape names\nread from the names section and use those escaped names in the IR. But\nthere is no reason to escape names in the IR; we can use the unmodified\nbyte sequences instead. Remove this unnecessary escaping and always\nstore names unescaped in the IR.\n\nThe binary writer was partially unescaping names when writing them back\nto the names section, but this is no longer necessary. After removing\nthis, we simply preserve whatever names were present in the input,\nmodulo any changes we might have made to avoid duplicate names.\n\nAsyncify and wasm-split read function names as input from the command\nline and from manifest files and would previously escape these names on\nreading so they would match up with the escaped names in the IR. Now\nthat the IR does not store escaped names, fix Asyncify and wasm-split to\nno longer escape these names. Remove wasm-split\u0027s --unescape option now\nthat function names will always be printed unescaped.\n\nAs a follow-on change we might consider _unescaping_ names taken on the\ncommand line or manifest files, which would allow users to more easily\npass names containing unprintable characters."
    },
    {
      "commit": "8c3dfa2d66a8983bebe6f1b3460189ac048232a2",
      "tree": "c2ba1dee25a4df166097a072a4b7cc72247ab7c6",
      "parents": [
        "f109fcde40ba668a3be7fcaf7b52a36f79f022fe"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jul 01 04:32:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 04:32:01 2026"
      },
      "message": "NFC: Fix gmock integration in unit tests (#8879)\n\nTested with the following code which passes (in arena.cpp, not in\nsource-map.cpp which would have already worked previously due to how it\nwas handled in the build file):\n\n\n```c++\n#include \"gmock/gmock-matchers.h\"\n...\nEXPECT_THAT(1, ::testing::Eq(1));\n```\n\nThis was written by Gemini. I didn\u0027t quite understand the fix but I\nfigured it\u0027s worth doing to make tests easier to write. Below is\nGemini\u0027s description of the fix.\n\n---\n\nPreviously, when `BUILD_FUZZTEST\u003dON`, the `fuzztest` dependency would\ndownload its own newer version of `googletest` (v1.14.0) via CMake\n`FetchContent`. The `gmock` headers bundled in Binaryen\u0027s\n`third_party/googletest/googlemock` were incompatible with this newer\n`googletest`. This caused compilation failures for tests using `gmock`.\nAs a workaround, `source-map.cpp` was completely excluded from the test\nsuite during fuzztest builds.\n\nThis fix works because `fuzztest`\u0027s `FetchContent` actually makes the\n`gmock` target available as well. By linking `binaryen-unittests`\nagainst the `gmock` target when `BUILD_FUZZTEST\u003dON`, CMake correctly\nconfigures the include paths to use the newly fetched `gmock` headers\ninstead of the bundled ones, seamlessly resolving the incompatibility.\n\n- Unconditionally include `source-map.cpp` in unit tests, rather than\nconditionally disabling it when `BUILD_FUZZTEST` is ON.\n- Link against the `gmock` target for `binaryen-unittests` when\n`BUILD_FUZZTEST` is ON."
    },
    {
      "commit": "f109fcde40ba668a3be7fcaf7b52a36f79f022fe",
      "tree": "194ab78c6d5f6a05da63b5767a62e3e9eb35f179",
      "parents": [
        "7ec528c264edb0092e5aaff08b3016ce4d6f9c7f"
      ],
      "author": {
        "name": "David Mak",
        "email": "david.18.19.21@gmail.com",
        "time": "Tue Jun 30 23:56:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 23:56:08 2026"
      },
      "message": "[C/JS APIs] Add BinaryenModuleParseWithFeatures (#8872)"
    },
    {
      "commit": "7ec528c264edb0092e5aaff08b3016ce4d6f9c7f",
      "tree": "c8246ad42b3414ac6982c14aa7445735a2fe0acf",
      "parents": [
        "82b864505db0502f7b19bdd327e5599230116eb9"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 30 18:52:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 18:52:03 2026"
      },
      "message": "inplace_iterator: Add enough iteration to support std::erase_if (#8877)"
    },
    {
      "commit": "82b864505db0502f7b19bdd327e5599230116eb9",
      "tree": "c657e123e0f4344d78fad51aed8ab21f4d3ba875",
      "parents": [
        "e945e94d3414b44f20b29d665e5f1f2433ec36b1"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Tue Jun 30 16:11:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 16:11:13 2026"
      },
      "message": "ConstraintAnalysis: Add conditional propagation (#8867)\n\nWhen we see an `if, br_if`, etc., we can propagate the condition along\nthe true branch, and its negation along the other."
    },
    {
      "commit": "e945e94d3414b44f20b29d665e5f1f2433ec36b1",
      "tree": "abe6643a8172a7b766a8ac0d3d07d65501705660",
      "parents": [
        "a981186756e20a0a0d4d32a41d522110735cc8ba"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Tue Jun 30 06:02:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 06:02:31 2026"
      },
      "message": "NFC: Fix const correctness in FlatTable (#8875)"
    },
    {
      "commit": "a981186756e20a0a0d4d32a41d522110735cc8ba",
      "tree": "4cf6378dd95801f53060538f2fd68ef8c65def2f",
      "parents": [
        "4514ec856ae412192fd25b50142404089e05e39f"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Mon Jun 29 21:24:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 21:24:03 2026"
      },
      "message": "Directize: Handle nulls written by element segments (#8873)\n\nThe old code just skipped them, so if a null trampled a function, we\nused the function, incorrectly."
    },
    {
      "commit": "4514ec856ae412192fd25b50142404089e05e39f",
      "tree": "8f18b283accbdc8f5fdffe40874900b44e1ac1ca",
      "parents": [
        "d39a6d824e2d41faa7852289b0a8f4f2659f3cf6"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Sun Jun 28 19:05:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 19:05:59 2026"
      },
      "message": "[wasm-merge] Make empty function names explicit with --output-manifest (#8871)\n\nEven for empty function names, they will be written to a manifest file\nwhen `--output-manifest` is given. But currently we don\u0027t print their\nnames in the name section, making them not searchable by wasm-split that\nuse the manifest file."
    },
    {
      "commit": "d39a6d824e2d41faa7852289b0a8f4f2659f3cf6",
      "tree": "d7221e886b58db6ee7fda00396cb8fc1ab742a4f",
      "parents": [
        "8a34ba8bb0a21def76ee6f4ec2ff43b59d9e7317"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Fri Jun 26 23:14:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 23:14:23 2026"
      },
      "message": "Move escape and unescape to names.h (NFC) (#8868)\n\nThis moves `escape` from `WasmBinaryReader` and `unescape` from\n`wasm-split.cpp` to `names.h`.\n\nCurrently `unescape` is a helper function only used in `wasm-split.cpp`,\nand this is a preparation for wasm-merge to use `unescape`. This also\nmoves `escape`, which is a pair, from `WasmBinaryReader`, because it is\nnot necessarily related to binary anyway.\n\nThis also changes the parameter type of `unescape` from `std::string` to\n`Name`."
    },
    {
      "commit": "8a34ba8bb0a21def76ee6f4ec2ff43b59d9e7317",
      "tree": "9badb546f6364bb72ce1e2067425e29a7c7fd1e3",
      "parents": [
        "9926156a583cec3d22d521232b31c70fa9a87dc1"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Jun 25 17:18:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 17:18:47 2026"
      },
      "message": "Add a ConstraintAnalysis pass (#8853)\n\nThis simply parses IR into constraints, flows them around, and sees\nif we can prove things.\n\nThis is a minimal version, without conditional propagation etc."
    },
    {
      "commit": "9926156a583cec3d22d521232b31c70fa9a87dc1",
      "tree": "d6623467e84a5a7ef9ffdd091af482b96d3e7523",
      "parents": [
        "9e55a0dea38f88c5e0d08bf36b462b9b9a0488f3"
      ],
      "author": {
        "name": "Martin Kustermann",
        "email": "kustermann@google.com",
        "time": "Thu Jun 25 15:17:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 15:17:28 2026"
      },
      "message": "[Debug info] Add --emit-module-names flag to tools (#8860)\n\nThe `wasm-split` command has this `--emit-module-names` flag already and\nthis adds it to `wasm-opt` and the other tools."
    },
    {
      "commit": "9e55a0dea38f88c5e0d08bf36b462b9b9a0488f3",
      "tree": "f418f8abca1e26bf2ba8f6fbb6d2f0785c4c520a",
      "parents": [
        "e645302bd972492bb508aed3769412113c77f876"
      ],
      "author": {
        "name": "Steven Fontanella",
        "email": "stevenfont@google.com",
        "time": "Wed Jun 24 23:17:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 23:17:35 2026"
      },
      "message": "Add acqrel ordering to atomic.fence (#8845)\n\nPart of #8165. See\nhttps://github.com/WebAssembly/threads/blob/main/proposals/threads/Overview.md#fence-operator.\nAdds support for\n\n* Parsing + printing the new ordering immediate for atomic.fence in text\nand binary\n* Library support in JS + C\n* Adds spec tests covering the new ordering\n\nFuzzing support is added in the next PR."
    },
    {
      "commit": "e645302bd972492bb508aed3769412113c77f876",
      "tree": "58315cc2e109ac688fed54311336cd9b44a0ee3c",
      "parents": [
        "b4e7159f0ea2ef11f4cdaf48eb8ce50fdddf88cd"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jun 24 22:53:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 22:53:29 2026"
      },
      "message": "[Strings] Fix Tag types in StringLowering (#8865)\n\nWe need to handle signature types, even public ones, when lowering away\nthe string type. We did that for functions\u0027 types, but not tags\u0027. This adds\na loop over tags as well."
    },
    {
      "commit": "b4e7159f0ea2ef11f4cdaf48eb8ce50fdddf88cd",
      "tree": "bba6bbe2cd83b233ca7ea18ebac348ab328b2a1b",
      "parents": [
        "dd74363c18f04648166e79a1afa4becd1e4fd099"
      ],
      "author": {
        "name": "Heejin Ahn",
        "email": "aheejin@gmail.com",
        "time": "Wed Jun 24 22:46:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 22:46:31 2026"
      },
      "message": "[wasm-split] Split more active segments for --no-placeholders (#8859)\n\nIf placeholders are not used, and if all functions in an element segment\nbelong to a single secondary module, we can move the segment to that\nsecondary module, because those functions aren\u0027t available until the\nsecondary module is loaded anyway.\n\nThe primary module size decreases 5-9% for acx_gallery and essentials.\nThese applications both use `--no-placeholders`.\n- acx_gallery (07/2025): 9.7%\n- acx_gallery (05/2026): 5.3%\n- essentials (04?/2026): 6.3%\n- essentials (05/2026): 8.4%"
    },
    {
      "commit": "dd74363c18f04648166e79a1afa4becd1e4fd099",
      "tree": "4fff24f66b13c0ee17e5e42532ff592338bd5677",
      "parents": [
        "ffcefc51ce74e301ca467d11ada2f2969f4c1f8b"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jun 24 20:58:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 20:58:54 2026"
      },
      "message": "Fix binary location tracking of Try (#8862)"
    },
    {
      "commit": "ffcefc51ce74e301ca467d11ada2f2969f4c1f8b",
      "tree": "6b5b5bf84a2a433a6e12f4df93de9b8a5647fd02",
      "parents": [
        "87be9bb04e3827894f64a1f5f5f1ae66a4df9674"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Tue Jun 23 22:58:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 22:58:26 2026"
      },
      "message": "Fix typing in RemoveRelaxedSIMD (#8863)\n\nWhen RemoveRelaxedSIMD replaced a relaxed SIMD instruction with a block\nending in `(unreachable)`, it previously failed to set that block\u0027s type\nto `Type::unreachable`. When the block\u0027s parent was another relaxed SIMD\ninstruction, the incorrect type caused an assertion failure."
    },
    {
      "commit": "87be9bb04e3827894f64a1f5f5f1ae66a4df9674",
      "tree": "d7e871d84bd85bc9c56ce6fb1da95d0d8d93958a",
      "parents": [
        "d93104341f59c06ce82cab16a2f3e8e8d1ee3845"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jun 18 23:06:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 23:06:54 2026"
      },
      "message": "Heap2Local: reset data structures after optimizing (#8857)\n\nThis entirely eliminates the class of bugs due to stale data in the\n`parents` and `localGraph` after a previous allocation has been\noptimized."
    },
    {
      "commit": "d93104341f59c06ce82cab16a2f3e8e8d1ee3845",
      "tree": "aa36d9365c006c576551b2affe0c47ab787bb2fd",
      "parents": [
        "b28a6ac69fef06bf29b04ae8af1d14e65a68f8eb"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Thu Jun 18 20:35:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 20:35:46 2026"
      },
      "message": "FuzzAgainstJS: Do not refine exact to inexact defined types (#8855)\n\nIt is ok to refine `exact $A` to `nullref`, but not to inexact `$B`."
    },
    {
      "commit": "b28a6ac69fef06bf29b04ae8af1d14e65a68f8eb",
      "tree": "85be7842a8ef38b5da248489a594ca184c32dfbd",
      "parents": [
        "aba417e711baa6eb92c8553ee59a15694c6f3819"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Thu Jun 18 17:02:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 17:02:57 2026"
      },
      "message": "Emit non-defaultable unreachable local.sets (#8858)\n\nWe recently started emitting local.sets of non-nullable locals after\nunreachable instructions that might be necessary for validation of\nsubsequent local.gets. However, this did not properly handle tuple\nlocals that contained non-nullable elements. Switch from using\n`isNonNullable` to using `isDefaultable` to determine which local.sets\nto emit."
    },
    {
      "commit": "aba417e711baa6eb92c8553ee59a15694c6f3819",
      "tree": "e32bc3817beac3d5aa7023324d7b80ae459a2c08",
      "parents": [
        "4b03c3a357a0dee7f39286db8b087ab9d9895847"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Jun 17 20:15:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 20:15:25 2026"
      },
      "message": "Fix `unreferencedFuncUseCount` (#8854)\n\nIt was being calculated incorrectly, which lead to public types being\nincorrectly classified as private. Update RemoveUnusedTypes to allow\nrunning in open-world and use it in a regression test showing that the\ntypes are now classified correctly.\n\nFixes #8852."
    },
    {
      "commit": "4b03c3a357a0dee7f39286db8b087ab9d9895847",
      "tree": "63c79efe428ae1f86e126b842c5d4ae8dbd4d4ea",
      "parents": [
        "5305dd4b982e27895a8c21822a270446036ebe37"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jun 17 17:35:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 17:35:08 2026"
      },
      "message": "Add a mathematical constraint system (#8816)\n\nThis allows defining constraints like `{ x \u003e\u003d 0 \u0026\u0026 x \u003c\u003d 100 }` and to\nthen check if they imply something else is true or false, like\n`{ x \u003e\u003d 0 \u0026\u0026 x \u003c\u003d 100 } \u003d\u003e { x \u003c 9999 }` (example of a valid inference).\n\nThis is the minimal first part of such a system, focusing on `\u003d\u003d, !\u003d`,\nand very simple solving."
    },
    {
      "commit": "5305dd4b982e27895a8c21822a270446036ebe37",
      "tree": "e7b1fca632d59624538e8464d5462b1e34fe8c3f",
      "parents": [
        "adc1e13876b872b06cd5f1638a5a0b1c22743e00"
      ],
      "author": {
        "name": "Alon Zakai",
        "email": "azakai@google.com",
        "time": "Wed Jun 17 17:14:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 17:14:37 2026"
      },
      "message": "wasm-ctor-eval: Stop on table changes (#8849)\n\nWe do not handle them yet, and ignored them before, incorrectly."
    },
    {
      "commit": "adc1e13876b872b06cd5f1638a5a0b1c22743e00",
      "tree": "9a0846db03d61bcb0aff4604ee696828a22331d1",
      "parents": [
        "97f505721a2d73cdfe18a24e7c15c50a1e83c8d9"
      ],
      "author": {
        "name": "Thomas Lively",
        "email": "tlively@google.com",
        "time": "Wed Jun 17 16:37:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 16:37:46 2026"
      },
      "message": "Preserve unreachable struct.set of non-nullable locals (#8844)\n\nBinaryen usually elides all instructions between unreachable\ninstructions and the ends of their surrounding control flow structures.\nIt also elides unnamed blocks. Meanwhile, WebAssembly validation rules\nrequire that gets of non-nullable locals are preceded by sets of the\nsame locals in the same or outer blocks. The combination of these\ncircumstances could previously cause Binaryen to emit invalid modules\nwhere local.sets after unreachables in unnamed blocks were elided but\nalso required for validation by later local.gets after the unnamed\nblocks.\n\nFix the problem by specifically finding and emitting local.sets of\nnon-nullable locals after unreachable instructions, emitting unreachable\nLocalSets as local.set instead of local.tee, and eliding more unnamed\nblocks. Update the fuzzer to no longer run DCE unconditionally at the\nend of the pipeline, which was the previous workaround for this problem.\n\nFixes #5599."
    },
    {
      "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."
    }
  ],
  "next": "06000bf0ee350cce1f14657a8978b0a88a35f408"
}
