From d0898b4f11fcd93b01b40c3c9a1d65f0f1991abc Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Sat, 30 May 2026 12:23:18 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix(encoder):=20make=20encode()=20total=20u?= =?UTF-8?q?nder=20fuzzing=20=E2=80=94=20wrapping=20branch=20offsets=20(#18?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `encoder_no_panic` fuzz target (empty corpus) intermittently found pre-existing panics, making Fuzz Smoke flaky. Two roots, both now closed: the PC/R15-operand debug_assert (#185, fixed in v0.11.4) and arithmetic overflow in the ARM32 branch encoders — `*offset - 2` overflow-panics at i32::MIN under `-Cdebug-assertions`. Use `wrapping_sub` (total, identical for any real branch offset). After this, a 180s sweep ran 8.8M executions with zero panics. Also adds a committed `fuzz/seed_corpus/encoder_no_panic/` (61 inputs promoted from the clean sweep + the #185 PC-reg regression) so CI's 60s run starts with coverage instead of exploring cold — the empty-corpus flakiness root. The i64_lowering_doesnt_clobber_params target has a separate finding (real clobber vs harness false-positive) tracked in #188. Co-Authored-By: Claude Opus 4.8 --- crates/synth-backend/src/arm_encoder.rs | 8 ++++++-- .../01c741ba81c2d32306209efa6baa405e03eb5591 | 1 + .../02add85966e163e9ec185d01b099d0a55334ea22 | Bin 0 -> 17 bytes .../052dad37bf2691484e958f186415201f6aa4ee94 | Bin 0 -> 12 bytes .../066eabbe40d192a98ac65f7640342f80a7fb2699 | Bin 0 -> 17 bytes .../0791b23945775913a5508774fb82841830dc669e | 1 + .../07c3913c546286214520bd2e42691c793436f18f | Bin 0 -> 14 bytes .../081a842db41d140c3ff4e6daa2ea11c5b9a4f5b7 | 1 + .../0853e9e5070d5843ebf00044946542876166d763 | Bin 0 -> 13 bytes .../0b461591806c44599fa98f894f0f18a2421d411e | Bin 0 -> 16 bytes .../0b675bd7193b2f4dd8ac0cc05c294ebfb0749442 | Bin 0 -> 17 bytes .../0bc1b02a6b29c6510f797f81d466750a13d0de84 | 1 + .../0cafe265e7162dffdae86864070a35b5f0a62d15 | 1 + .../10818c881c72d3e45689232ecfc496b0f280eac2 | Bin 0 -> 17 bytes .../131976fcf0873018a59051e10617f43ddbc3cfc8 | Bin 0 -> 17 bytes .../14ef6485e27b9cd15f2739ff84e0a703fba45a36 | 1 + .../1741a36e456a500d864a7085274edd384e7ae867 | Bin 0 -> 17 bytes .../17d352983614115317535d667afc520f9e37ef8d | 1 + .../17db3ed51d15aa8409c14b1f3fb0cc19799a2d8d | Bin 0 -> 12 bytes .../18b240089eebb313fde6a83167306e5e416d407c | Bin 0 -> 16 bytes .../1b5c77aa1696d37306789e0ff5aad2b1b3c5ff5f | Bin 0 -> 17 bytes .../1b7dac994fa401f3cadd8bc4f61ee9b83a99040a | Bin 0 -> 19 bytes .../1c4c843d518816cc22a46c73ba753206e76c9f29 | 1 + .../1cebbaaa4e37106bd19668d7a456d994354deb09 | Bin 0 -> 16 bytes .../1dc0d443ae1a80c28099dd9f6b8d0b3f5e356648 | Bin 0 -> 13 bytes .../202e560da5a03075fdd33fd689fc0d59dafce7e7 | 1 + .../24559c3f8fdcab9bbb4d5c17e56846b3109da86e | Bin 0 -> 16 bytes .../24c0604a69f37a9ccd09ca7049d8e749654101bf | Bin 0 -> 17 bytes .../25287f127e4c6f29ebf0af167c9e5e2f932a0ac8 | Bin 0 -> 16 bytes .../253e7203158c3a04ea752de6f5033c8d6bd049bc | Bin 0 -> 16 bytes .../255a8d28a5a3a1b7295fc85991671ad6e56a082a | 1 + .../29cc576a2977fe3e10959a03a99a60902ca6fb5c | Bin 0 -> 16 bytes .../2b824e895b59b8124efba191937af919e9a27f65 | Bin 0 -> 17 bytes .../2ee4abf4807429ad301734a90560f59bdc4d1aaf | Bin 0 -> 12 bytes .../3028d6765e9ce69c7b8bba72d720e1dcd3c949fc | 1 + .../30a272ecd24b1f22d5a4ef1cd23badddf2d6a9c6 | 1 + .../313c9a2a05a2746ce02793f287da86dc930795b7 | 1 + .../34b0791056112f4be21b81aa7d9f45e453f59d03 | 1 + .../3746ca1369fd00c26da61ccca53f67baf0f1643c | Bin 0 -> 17 bytes .../3bcaf23a06efe0140e44d824cce914d1a3cfa964 | 1 + .../3bd005362358fff28598c33620bdde7484dbfa8d | 1 + .../3db8941d633cc403ca792421e263ff5bcf532475 | Bin 0 -> 18 bytes .../3ef1a93d0d4c23589ffceee21a40bc35349074c0 | Bin 0 -> 16 bytes .../400e51b53c425764b51ff3cb8c4b0de0e9941048 | 1 + .../435b787be376b9a08e8685b32c877155e60f2a58 | 1 + .../44441084198569fd0a880748c5c7421befb2849e | 1 + .../458b8e5c96eb8c6671bac0c4366cc45940f74619 | 1 + .../46bd250f94d752c9051864659bdc01dece5edf3b | 1 + .../4ba2aa576b90e56125a117c13ed70398e5118294 | Bin 0 -> 12 bytes .../4d22e9d694e2d0a1acc8ee4c1fb7937e77efa629 | 1 + .../4dc7ef76e0e48c3b7cceaf5b04b9203869ff1dd7 | 1 + .../4e72aac8be2644efebe6ecf5a91a87d6d93d08d3 | 1 + .../51f956cbe74b1e500cc095c14e617d9e21a920b4 | Bin 0 -> 18 bytes .../533c6bd6befea59c033a89a8a5ae19620465782f | Bin 0 -> 14 bytes .../541b214d1dfd857c43c369be219d737e14952959 | Bin 0 -> 14 bytes .../569c22086c5f12d8f11ae01b34c0ab9179ab2041 | Bin 0 -> 14 bytes .../57e14966ca349f809f09d8ff5d647ef4a51cb5b1 | 1 + .../5a8b55ec142de064d8427e5a731fb1df533f8632 | 1 + .../5b2f745ac2eba22170128e10359d0742f3f0205f | 1 + .../5b6f1437a66b82d7b6f58c7eb738578076516519 | Bin 0 -> 14 bytes .../5e116bf6f506c1ca0729371024b35c7ad32231c7 | Bin 0 -> 17 bytes .../encoder_no_panic/regression-185-pc-reg | 1 + 62 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 fuzz/seed_corpus/encoder_no_panic/01c741ba81c2d32306209efa6baa405e03eb5591 create mode 100644 fuzz/seed_corpus/encoder_no_panic/02add85966e163e9ec185d01b099d0a55334ea22 create mode 100644 fuzz/seed_corpus/encoder_no_panic/052dad37bf2691484e958f186415201f6aa4ee94 create mode 100644 fuzz/seed_corpus/encoder_no_panic/066eabbe40d192a98ac65f7640342f80a7fb2699 create mode 100644 fuzz/seed_corpus/encoder_no_panic/0791b23945775913a5508774fb82841830dc669e create mode 100644 fuzz/seed_corpus/encoder_no_panic/07c3913c546286214520bd2e42691c793436f18f create mode 100644 fuzz/seed_corpus/encoder_no_panic/081a842db41d140c3ff4e6daa2ea11c5b9a4f5b7 create mode 100644 fuzz/seed_corpus/encoder_no_panic/0853e9e5070d5843ebf00044946542876166d763 create mode 100644 fuzz/seed_corpus/encoder_no_panic/0b461591806c44599fa98f894f0f18a2421d411e create mode 100644 fuzz/seed_corpus/encoder_no_panic/0b675bd7193b2f4dd8ac0cc05c294ebfb0749442 create mode 100644 fuzz/seed_corpus/encoder_no_panic/0bc1b02a6b29c6510f797f81d466750a13d0de84 create mode 100644 fuzz/seed_corpus/encoder_no_panic/0cafe265e7162dffdae86864070a35b5f0a62d15 create mode 100644 fuzz/seed_corpus/encoder_no_panic/10818c881c72d3e45689232ecfc496b0f280eac2 create mode 100644 fuzz/seed_corpus/encoder_no_panic/131976fcf0873018a59051e10617f43ddbc3cfc8 create mode 100644 fuzz/seed_corpus/encoder_no_panic/14ef6485e27b9cd15f2739ff84e0a703fba45a36 create mode 100644 fuzz/seed_corpus/encoder_no_panic/1741a36e456a500d864a7085274edd384e7ae867 create mode 100644 fuzz/seed_corpus/encoder_no_panic/17d352983614115317535d667afc520f9e37ef8d create mode 100644 fuzz/seed_corpus/encoder_no_panic/17db3ed51d15aa8409c14b1f3fb0cc19799a2d8d create mode 100644 fuzz/seed_corpus/encoder_no_panic/18b240089eebb313fde6a83167306e5e416d407c create mode 100644 fuzz/seed_corpus/encoder_no_panic/1b5c77aa1696d37306789e0ff5aad2b1b3c5ff5f create mode 100644 fuzz/seed_corpus/encoder_no_panic/1b7dac994fa401f3cadd8bc4f61ee9b83a99040a create mode 100644 fuzz/seed_corpus/encoder_no_panic/1c4c843d518816cc22a46c73ba753206e76c9f29 create mode 100644 fuzz/seed_corpus/encoder_no_panic/1cebbaaa4e37106bd19668d7a456d994354deb09 create mode 100644 fuzz/seed_corpus/encoder_no_panic/1dc0d443ae1a80c28099dd9f6b8d0b3f5e356648 create mode 100644 fuzz/seed_corpus/encoder_no_panic/202e560da5a03075fdd33fd689fc0d59dafce7e7 create mode 100644 fuzz/seed_corpus/encoder_no_panic/24559c3f8fdcab9bbb4d5c17e56846b3109da86e create mode 100644 fuzz/seed_corpus/encoder_no_panic/24c0604a69f37a9ccd09ca7049d8e749654101bf create mode 100644 fuzz/seed_corpus/encoder_no_panic/25287f127e4c6f29ebf0af167c9e5e2f932a0ac8 create mode 100644 fuzz/seed_corpus/encoder_no_panic/253e7203158c3a04ea752de6f5033c8d6bd049bc create mode 100644 fuzz/seed_corpus/encoder_no_panic/255a8d28a5a3a1b7295fc85991671ad6e56a082a create mode 100644 fuzz/seed_corpus/encoder_no_panic/29cc576a2977fe3e10959a03a99a60902ca6fb5c create mode 100644 fuzz/seed_corpus/encoder_no_panic/2b824e895b59b8124efba191937af919e9a27f65 create mode 100644 fuzz/seed_corpus/encoder_no_panic/2ee4abf4807429ad301734a90560f59bdc4d1aaf create mode 100644 fuzz/seed_corpus/encoder_no_panic/3028d6765e9ce69c7b8bba72d720e1dcd3c949fc create mode 100644 fuzz/seed_corpus/encoder_no_panic/30a272ecd24b1f22d5a4ef1cd23badddf2d6a9c6 create mode 100644 fuzz/seed_corpus/encoder_no_panic/313c9a2a05a2746ce02793f287da86dc930795b7 create mode 100644 fuzz/seed_corpus/encoder_no_panic/34b0791056112f4be21b81aa7d9f45e453f59d03 create mode 100644 fuzz/seed_corpus/encoder_no_panic/3746ca1369fd00c26da61ccca53f67baf0f1643c create mode 100644 fuzz/seed_corpus/encoder_no_panic/3bcaf23a06efe0140e44d824cce914d1a3cfa964 create mode 100644 fuzz/seed_corpus/encoder_no_panic/3bd005362358fff28598c33620bdde7484dbfa8d create mode 100644 fuzz/seed_corpus/encoder_no_panic/3db8941d633cc403ca792421e263ff5bcf532475 create mode 100644 fuzz/seed_corpus/encoder_no_panic/3ef1a93d0d4c23589ffceee21a40bc35349074c0 create mode 100644 fuzz/seed_corpus/encoder_no_panic/400e51b53c425764b51ff3cb8c4b0de0e9941048 create mode 100644 fuzz/seed_corpus/encoder_no_panic/435b787be376b9a08e8685b32c877155e60f2a58 create mode 100644 fuzz/seed_corpus/encoder_no_panic/44441084198569fd0a880748c5c7421befb2849e create mode 100644 fuzz/seed_corpus/encoder_no_panic/458b8e5c96eb8c6671bac0c4366cc45940f74619 create mode 100644 fuzz/seed_corpus/encoder_no_panic/46bd250f94d752c9051864659bdc01dece5edf3b create mode 100644 fuzz/seed_corpus/encoder_no_panic/4ba2aa576b90e56125a117c13ed70398e5118294 create mode 100644 fuzz/seed_corpus/encoder_no_panic/4d22e9d694e2d0a1acc8ee4c1fb7937e77efa629 create mode 100644 fuzz/seed_corpus/encoder_no_panic/4dc7ef76e0e48c3b7cceaf5b04b9203869ff1dd7 create mode 100644 fuzz/seed_corpus/encoder_no_panic/4e72aac8be2644efebe6ecf5a91a87d6d93d08d3 create mode 100644 fuzz/seed_corpus/encoder_no_panic/51f956cbe74b1e500cc095c14e617d9e21a920b4 create mode 100644 fuzz/seed_corpus/encoder_no_panic/533c6bd6befea59c033a89a8a5ae19620465782f create mode 100644 fuzz/seed_corpus/encoder_no_panic/541b214d1dfd857c43c369be219d737e14952959 create mode 100644 fuzz/seed_corpus/encoder_no_panic/569c22086c5f12d8f11ae01b34c0ab9179ab2041 create mode 100644 fuzz/seed_corpus/encoder_no_panic/57e14966ca349f809f09d8ff5d647ef4a51cb5b1 create mode 100644 fuzz/seed_corpus/encoder_no_panic/5a8b55ec142de064d8427e5a731fb1df533f8632 create mode 100644 fuzz/seed_corpus/encoder_no_panic/5b2f745ac2eba22170128e10359d0742f3f0205f create mode 100644 fuzz/seed_corpus/encoder_no_panic/5b6f1437a66b82d7b6f58c7eb738578076516519 create mode 100644 fuzz/seed_corpus/encoder_no_panic/5e116bf6f506c1ca0729371024b35c7ad32231c7 create mode 100644 fuzz/seed_corpus/encoder_no_panic/regression-185-pc-reg diff --git a/crates/synth-backend/src/arm_encoder.rs b/crates/synth-backend/src/arm_encoder.rs index 4d063bd0..33447c8b 100644 --- a/crates/synth-backend/src/arm_encoder.rs +++ b/crates/synth-backend/src/arm_encoder.rs @@ -485,7 +485,10 @@ impl ArmEncoder { // ARM adds PC+8 to the offset, so we need to adjust: // target = PC + 8 + (offset * 4) // For backward branch of N instructions: offset = -(N + 2) - let adjusted_offset = *offset - 2; // Account for PC+8 + // wrapping_sub keeps the encoder total under fuzzing (#186): an + // extreme i32::MIN offset would otherwise overflow-panic; for any + // real branch offset this is identical to `- 2`. + let adjusted_offset = offset.wrapping_sub(2); // Account for PC+8 let offset_bits = (adjusted_offset as u32) & 0x00FFFFFF; 0xEA000000 | offset_bits } @@ -506,7 +509,8 @@ impl ArmEncoder { Condition::LE => 0xD, }; // B encoding: cond(4) | 1010 | offset(24) - let adjusted_offset = *offset - 2; // Account for PC+8 + // wrapping_sub: total under fuzzing (#186), identical for real offsets. + let adjusted_offset = offset.wrapping_sub(2); // Account for PC+8 let offset_bits = (adjusted_offset as u32) & 0x00FFFFFF; (cond_bits << 28) | 0x0A000000 | offset_bits } diff --git a/fuzz/seed_corpus/encoder_no_panic/01c741ba81c2d32306209efa6baa405e03eb5591 b/fuzz/seed_corpus/encoder_no_panic/01c741ba81c2d32306209efa6baa405e03eb5591 new file mode 100644 index 00000000..9a43be5d --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/01c741ba81c2d32306209efa6baa405e03eb5591 @@ -0,0 +1 @@ +²ž……ÿ:—°){Ú \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/02add85966e163e9ec185d01b099d0a55334ea22 b/fuzz/seed_corpus/encoder_no_panic/02add85966e163e9ec185d01b099d0a55334ea22 new file mode 100644 index 0000000000000000000000000000000000000000..e04f49b442d0f3a3ae78b0d145d0b63ccce9e596 GIT binary patch literal 17 XcmY$BZ``?aXT~CdBt`}xP*4N_HyH%5 literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/052dad37bf2691484e958f186415201f6aa4ee94 b/fuzz/seed_corpus/encoder_no_panic/052dad37bf2691484e958f186415201f6aa4ee94 new file mode 100644 index 0000000000000000000000000000000000000000..2542b22ca9bc2c82a52011181ec554263ae547f4 GIT binary patch literal 12 TcmdnAgR6vri-Cb*9>Y8U7lH#X literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/066eabbe40d192a98ac65f7640342f80a7fb2699 b/fuzz/seed_corpus/encoder_no_panic/066eabbe40d192a98ac65f7640342f80a7fb2699 new file mode 100644 index 0000000000000000000000000000000000000000..f62380fb1b19958e5b8407484d02fb24704ce9c3 GIT binary patch literal 17 Tcmexgw`m^7(t2?QDEJQmJ8%UM literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/0791b23945775913a5508774fb82841830dc669e b/fuzz/seed_corpus/encoder_no_panic/0791b23945775913a5508774fb82841830dc669e new file mode 100644 index 00000000..7138a54b --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/0791b23945775913a5508774fb82841830dc669e @@ -0,0 +1 @@ +ååååž²/… \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/07c3913c546286214520bd2e42691c793436f18f b/fuzz/seed_corpus/encoder_no_panic/07c3913c546286214520bd2e42691c793436f18f new file mode 100644 index 0000000000000000000000000000000000000000..55594eda84e26ae5e68f15c5ffe0f65124df96a9 GIT binary patch literal 14 VcmdnAgR6vrn~Rfyk%56h0RS1T0w@3g literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/081a842db41d140c3ff4e6daa2ea11c5b9a4f5b7 b/fuzz/seed_corpus/encoder_no_panic/081a842db41d140c3ff4e6daa2ea11c5b9a4f5b7 new file mode 100644 index 00000000..2801c8c3 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/081a842db41d140c3ff4e6daa2ea11c5b9a4f5b7 @@ -0,0 +1 @@ +²„ß \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/0853e9e5070d5843ebf00044946542876166d763 b/fuzz/seed_corpus/encoder_no_panic/0853e9e5070d5843ebf00044946542876166d763 new file mode 100644 index 0000000000000000000000000000000000000000..939001d7cfeb77c25e1e488b9d327769478ab66d GIT binary patch literal 13 UcmbQI#u40OJ1K#IVUk)Z037NA_y7O^ literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/0b461591806c44599fa98f894f0f18a2421d411e b/fuzz/seed_corpus/encoder_no_panic/0b461591806c44599fa98f894f0f18a2421d411e new file mode 100644 index 0000000000000000000000000000000000000000..448b2e822802762d6f842fb8a482e1e732e3746c GIT binary patch literal 16 UcmZ3wX`b4=O$-<78FqpJ07&c!5&!@I literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/0b675bd7193b2f4dd8ac0cc05c294ebfb0749442 b/fuzz/seed_corpus/encoder_no_panic/0b675bd7193b2f4dd8ac0cc05c294ebfb0749442 new file mode 100644 index 0000000000000000000000000000000000000000..0d80fc366e7356d8265605670c350f8c0f638137 GIT binary patch literal 17 WcmezW@B1{{|Nnn80KujoKmq__w+L$h literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/0bc1b02a6b29c6510f797f81d466750a13d0de84 b/fuzz/seed_corpus/encoder_no_panic/0bc1b02a6b29c6510f797f81d466750a13d0de84 new file mode 100644 index 00000000..728dcae4 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/0bc1b02a6b29c6510f797f81d466750a13d0de84 @@ -0,0 +1 @@ +¥m…[ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/0cafe265e7162dffdae86864070a35b5f0a62d15 b/fuzz/seed_corpus/encoder_no_panic/0cafe265e7162dffdae86864070a35b5f0a62d15 new file mode 100644 index 00000000..a2cd8457 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/0cafe265e7162dffdae86864070a35b5f0a62d15 @@ -0,0 +1 @@ +Ų \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/10818c881c72d3e45689232ecfc496b0f280eac2 b/fuzz/seed_corpus/encoder_no_panic/10818c881c72d3e45689232ecfc496b0f280eac2 new file mode 100644 index 0000000000000000000000000000000000000000..9e823d44d3a349e0b30997f12f395e98a7bc5542 GIT binary patch literal 17 Tcmdlqk7H?lE&~Ys=Kv7^G4TZO literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/131976fcf0873018a59051e10617f43ddbc3cfc8 b/fuzz/seed_corpus/encoder_no_panic/131976fcf0873018a59051e10617f43ddbc3cfc8 new file mode 100644 index 0000000000000000000000000000000000000000..1e3285c4e61997e7e9dcd4f5f21d984f1d396c95 GIT binary patch literal 17 PcmZo=U}$APfCdHt5i9|V literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/14ef6485e27b9cd15f2739ff84e0a703fba45a36 b/fuzz/seed_corpus/encoder_no_panic/14ef6485e27b9cd15f2739ff84e0a703fba45a36 new file mode 100644 index 00000000..1665fd86 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/14ef6485e27b9cd15f2739ff84e0a703fba45a36 @@ -0,0 +1 @@ +? ~[ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/1741a36e456a500d864a7085274edd384e7ae867 b/fuzz/seed_corpus/encoder_no_panic/1741a36e456a500d864a7085274edd384e7ae867 new file mode 100644 index 0000000000000000000000000000000000000000..14863cf5550bd816f610eab1b982b037920565a3 GIT binary patch literal 17 TcmezWZ__-Er3ardK*4taPCy2i literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/17d352983614115317535d667afc520f9e37ef8d b/fuzz/seed_corpus/encoder_no_panic/17d352983614115317535d667afc520f9e37ef8d new file mode 100644 index 00000000..11a9edf6 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/17d352983614115317535d667afc520f9e37ef8d @@ -0,0 +1 @@ +’Ý’¡ÿÿÿÿÿÿmÑ…… \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/17db3ed51d15aa8409c14b1f3fb0cc19799a2d8d b/fuzz/seed_corpus/encoder_no_panic/17db3ed51d15aa8409c14b1f3fb0cc19799a2d8d new file mode 100644 index 0000000000000000000000000000000000000000..74ed920c92d8ca903ccd159020fa2c0ae07cc2a5 GIT binary patch literal 12 TcmbQoz%Y-2L5+cdK_e9a4x0h+ literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/18b240089eebb313fde6a83167306e5e416d407c b/fuzz/seed_corpus/encoder_no_panic/18b240089eebb313fde6a83167306e5e416d407c new file mode 100644 index 0000000000000000000000000000000000000000..05a25556c5bdec7ddededced5d925c5a3d81d4d4 GIT binary patch literal 16 UcmZQz+{D4apa=&4LteK402g8eL;wH) literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/1b5c77aa1696d37306789e0ff5aad2b1b3c5ff5f b/fuzz/seed_corpus/encoder_no_panic/1b5c77aa1696d37306789e0ff5aad2b1b3c5ff5f new file mode 100644 index 0000000000000000000000000000000000000000..6b2ee8aade140c06c33fc8c37c12590282c65610 GIT binary patch literal 17 Xcmdlqk7LvS{~W)jxBman00hwhS-%K? literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/1b7dac994fa401f3cadd8bc4f61ee9b83a99040a b/fuzz/seed_corpus/encoder_no_panic/1b7dac994fa401f3cadd8bc4f61ee9b83a99040a new file mode 100644 index 0000000000000000000000000000000000000000..6c83014a3657d87f4731f0d94f7f1216e355f60b GIT binary patch literal 19 UcmZo=U}RumUKGU_QUM^516cq7 literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/25287f127e4c6f29ebf0af167c9e5e2f932a0ac8 b/fuzz/seed_corpus/encoder_no_panic/25287f127e4c6f29ebf0af167c9e5e2f932a0ac8 new file mode 100644 index 0000000000000000000000000000000000000000..3115c2472bd031156e9e7c38989ea107a982fb4a GIT binary patch literal 16 VcmcC80fHz=#TX_ghT^r0aseF&1S|jm literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/253e7203158c3a04ea752de6f5033c8d6bd049bc b/fuzz/seed_corpus/encoder_no_panic/253e7203158c3a04ea752de6f5033c8d6bd049bc new file mode 100644 index 0000000000000000000000000000000000000000..2de646c65ab495eb855489dee964a44ddfb150b3 GIT binary patch literal 16 Ucmdlaf6>{9kpT=iHs$UF03red`2YX_ literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/255a8d28a5a3a1b7295fc85991671ad6e56a082a b/fuzz/seed_corpus/encoder_no_panic/255a8d28a5a3a1b7295fc85991671ad6e56a082a new file mode 100644 index 00000000..58f4d6dc --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/255a8d28a5a3a1b7295fc85991671ad6e56a082a @@ -0,0 +1 @@ +=—u„ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/29cc576a2977fe3e10959a03a99a60902ca6fb5c b/fuzz/seed_corpus/encoder_no_panic/29cc576a2977fe3e10959a03a99a60902ca6fb5c new file mode 100644 index 0000000000000000000000000000000000000000..f79db8dc02dd214b353a116c8286c8888d236f6c GIT binary patch literal 16 XcmYdt%u>(#FDx?kKSQx*#;th(H8Td) literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/2b824e895b59b8124efba191937af919e9a27f65 b/fuzz/seed_corpus/encoder_no_panic/2b824e895b59b8124efba191937af919e9a27f65 new file mode 100644 index 0000000000000000000000000000000000000000..62d1ed93ce24c8f65e847bfa6a09c37477b12239 GIT binary patch literal 17 WcmY$BZ``?aXYL|_Bt`}hPy_%s5CoL~ literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/2ee4abf4807429ad301734a90560f59bdc4d1aaf b/fuzz/seed_corpus/encoder_no_panic/2ee4abf4807429ad301734a90560f59bdc4d1aaf new file mode 100644 index 0000000000000000000000000000000000000000..47a5844ca09aaec7498a6e3471ca3719b90b75ff GIT binary patch literal 12 TcmZ?#KQot`p`3BQ?XPVBAz%e| literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/3028d6765e9ce69c7b8bba72d720e1dcd3c949fc b/fuzz/seed_corpus/encoder_no_panic/3028d6765e9ce69c7b8bba72d720e1dcd3c949fc new file mode 100644 index 00000000..6283574d --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/3028d6765e9ce69c7b8bba72d720e1dcd3c949fc @@ -0,0 +1 @@ +ÑCÑC \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/30a272ecd24b1f22d5a4ef1cd23badddf2d6a9c6 b/fuzz/seed_corpus/encoder_no_panic/30a272ecd24b1f22d5a4ef1cd23badddf2d6a9c6 new file mode 100644 index 00000000..b299469e --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/30a272ecd24b1f22d5a4ef1cd23badddf2d6a9c6 @@ -0,0 +1 @@ +²džë¦�•� \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/313c9a2a05a2746ce02793f287da86dc930795b7 b/fuzz/seed_corpus/encoder_no_panic/313c9a2a05a2746ce02793f287da86dc930795b7 new file mode 100644 index 00000000..a7208ac3 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/313c9a2a05a2746ce02793f287da86dc930795b7 @@ -0,0 +1 @@ +ªªªªªm]ë \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/34b0791056112f4be21b81aa7d9f45e453f59d03 b/fuzz/seed_corpus/encoder_no_panic/34b0791056112f4be21b81aa7d9f45e453f59d03 new file mode 100644 index 00000000..d4833151 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/34b0791056112f4be21b81aa7d9f45e453f59d03 @@ -0,0 +1 @@ +²ž�m \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/3746ca1369fd00c26da61ccca53f67baf0f1643c b/fuzz/seed_corpus/encoder_no_panic/3746ca1369fd00c26da61ccca53f67baf0f1643c new file mode 100644 index 0000000000000000000000000000000000000000..5a4a4e63bfd8f990ade2bb9e907247a172dfe776 GIT binary patch literal 17 YcmZp<|9zS*14D4n;oOG{7#J8>0ZKCl!vFvP literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/3bcaf23a06efe0140e44d824cce914d1a3cfa964 b/fuzz/seed_corpus/encoder_no_panic/3bcaf23a06efe0140e44d824cce914d1a3cfa964 new file mode 100644 index 00000000..547fd212 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/3bcaf23a06efe0140e44d824cce914d1a3cfa964 @@ -0,0 +1 @@ +²žüzyÿûÇ0ÿ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/3bd005362358fff28598c33620bdde7484dbfa8d b/fuzz/seed_corpus/encoder_no_panic/3bd005362358fff28598c33620bdde7484dbfa8d new file mode 100644 index 00000000..340250c3 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/3bd005362358fff28598c33620bdde7484dbfa8d @@ -0,0 +1 @@ +²mžë \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/3db8941d633cc403ca792421e263ff5bcf532475 b/fuzz/seed_corpus/encoder_no_panic/3db8941d633cc403ca792421e263ff5bcf532475 new file mode 100644 index 0000000000000000000000000000000000000000..dbcb0aa7a9aa86e239114c3c6895d8bcf8f18437 GIT binary patch literal 18 ZcmcEJ*tCPIgh7{^i-CcWfq|iL9snhI1AqVk literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/3ef1a93d0d4c23589ffceee21a40bc35349074c0 b/fuzz/seed_corpus/encoder_no_panic/3ef1a93d0d4c23589ffceee21a40bc35349074c0 new file mode 100644 index 0000000000000000000000000000000000000000..8a0881ece3a44ca4e3f797fc54deefe5a3609914 GIT binary patch literal 16 VcmbQIroaFK0-NR?&E;rK1ppop1Ze;O literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/400e51b53c425764b51ff3cb8c4b0de0e9941048 b/fuzz/seed_corpus/encoder_no_panic/400e51b53c425764b51ff3cb8c4b0de0e9941048 new file mode 100644 index 00000000..e779633c --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/400e51b53c425764b51ff3cb8c4b0de0e9941048 @@ -0,0 +1 @@ +­ÚÚÚ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/435b787be376b9a08e8685b32c877155e60f2a58 b/fuzz/seed_corpus/encoder_no_panic/435b787be376b9a08e8685b32c877155e60f2a58 new file mode 100644 index 00000000..dd8310b9 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/435b787be376b9a08e8685b32c877155e60f2a58 @@ -0,0 +1 @@ +²~Z÷zlC… \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/44441084198569fd0a880748c5c7421befb2849e b/fuzz/seed_corpus/encoder_no_panic/44441084198569fd0a880748c5c7421befb2849e new file mode 100644 index 00000000..f5d2ae3a --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/44441084198569fd0a880748c5c7421befb2849e @@ -0,0 +1 @@ +²…žåv/å \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/458b8e5c96eb8c6671bac0c4366cc45940f74619 b/fuzz/seed_corpus/encoder_no_panic/458b8e5c96eb8c6671bac0c4366cc45940f74619 new file mode 100644 index 00000000..9c09c870 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/458b8e5c96eb8c6671bac0c4366cc45940f74619 @@ -0,0 +1 @@ +²~j聾“¼ö \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/46bd250f94d752c9051864659bdc01dece5edf3b b/fuzz/seed_corpus/encoder_no_panic/46bd250f94d752c9051864659bdc01dece5edf3b new file mode 100644 index 00000000..ca95df07 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/46bd250f94d752c9051864659bdc01dece5edf3b @@ -0,0 +1 @@ +—= \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/4ba2aa576b90e56125a117c13ed70398e5118294 b/fuzz/seed_corpus/encoder_no_panic/4ba2aa576b90e56125a117c13ed70398e5118294 new file mode 100644 index 0000000000000000000000000000000000000000..08fc61d94240b5785f7c26c7c1a2b02cbfa9ce93 GIT binary patch literal 12 TcmZ>?4i4_Iog|mQ!0;ac7*+%O literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/4d22e9d694e2d0a1acc8ee4c1fb7937e77efa629 b/fuzz/seed_corpus/encoder_no_panic/4d22e9d694e2d0a1acc8ee4c1fb7937e77efa629 new file mode 100644 index 00000000..508f1844 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/4d22e9d694e2d0a1acc8ee4c1fb7937e77efa629 @@ -0,0 +1 @@ +—²—²„— \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/4dc7ef76e0e48c3b7cceaf5b04b9203869ff1dd7 b/fuzz/seed_corpus/encoder_no_panic/4dc7ef76e0e48c3b7cceaf5b04b9203869ff1dd7 new file mode 100644 index 00000000..7dff3b47 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/4dc7ef76e0e48c3b7cceaf5b04b9203869ff1dd7 @@ -0,0 +1 @@ +²~聾“¼÷z \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/4e72aac8be2644efebe6ecf5a91a87d6d93d08d3 b/fuzz/seed_corpus/encoder_no_panic/4e72aac8be2644efebe6ecf5a91a87d6d93d08d3 new file mode 100644 index 00000000..0ebc96ef --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/4e72aac8be2644efebe6ecf5a91a87d6d93d08d3 @@ -0,0 +1 @@ +²m!!!!!!!!!Të„ß \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/51f956cbe74b1e500cc095c14e617d9e21a920b4 b/fuzz/seed_corpus/encoder_no_panic/51f956cbe74b1e500cc095c14e617d9e21a920b4 new file mode 100644 index 0000000000000000000000000000000000000000..231475d046f157f2cc6d5a7385f2d818a062e1de GIT binary patch literal 18 NcmZn_W;Mb40U!VX literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/533c6bd6befea59c033a89a8a5ae19620465782f b/fuzz/seed_corpus/encoder_no_panic/533c6bd6befea59c033a89a8a5ae19620465782f new file mode 100644 index 0000000000000000000000000000000000000000..8371d7619e56e046a308ebe10fc15f99407b1e49 GIT binary patch literal 14 TcmZQ%~+p6^^1^^-Z1mpk! literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/57e14966ca349f809f09d8ff5d647ef4a51cb5b1 b/fuzz/seed_corpus/encoder_no_panic/57e14966ca349f809f09d8ff5d647ef4a51cb5b1 new file mode 100644 index 00000000..b90a35da --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/57e14966ca349f809f09d8ff5d647ef4a51cb5b1 @@ -0,0 +1 @@ +Ñ \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/5a8b55ec142de064d8427e5a731fb1df533f8632 b/fuzz/seed_corpus/encoder_no_panic/5a8b55ec142de064d8427e5a731fb1df533f8632 new file mode 100644 index 00000000..84e26300 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/5a8b55ec142de064d8427e5a731fb1df533f8632 @@ -0,0 +1 @@ +²ž…&…m’…e \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/5b2f745ac2eba22170128e10359d0742f3f0205f b/fuzz/seed_corpus/encoder_no_panic/5b2f745ac2eba22170128e10359d0742f3f0205f new file mode 100644 index 00000000..ed7930e2 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/5b2f745ac2eba22170128e10359d0742f3f0205f @@ -0,0 +1 @@ +&žSŒ=’²…hhh \ No newline at end of file diff --git a/fuzz/seed_corpus/encoder_no_panic/5b6f1437a66b82d7b6f58c7eb738578076516519 b/fuzz/seed_corpus/encoder_no_panic/5b6f1437a66b82d7b6f58c7eb738578076516519 new file mode 100644 index 0000000000000000000000000000000000000000..c1ecc8ba48fcba2be0e213bfc6f4b2b51775f407 GIT binary patch literal 14 UcmbQI7TmLHl3W4<0}ycl03~Jv#sB~S literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/5e116bf6f506c1ca0729371024b35c7ad32231c7 b/fuzz/seed_corpus/encoder_no_panic/5e116bf6f506c1ca0729371024b35c7ad32231c7 new file mode 100644 index 0000000000000000000000000000000000000000..8083cdf53ed97ab3f4b07e8d1b741fc979d62df2 GIT binary patch literal 17 Zcmdlqk7LvS{~W)jxBh4N&%nSC4FFic2!H?p literal 0 HcmV?d00001 diff --git a/fuzz/seed_corpus/encoder_no_panic/regression-185-pc-reg b/fuzz/seed_corpus/encoder_no_panic/regression-185-pc-reg new file mode 100644 index 00000000..fc644095 --- /dev/null +++ b/fuzz/seed_corpus/encoder_no_panic/regression-185-pc-reg @@ -0,0 +1 @@ +²ž…um…*ü \ No newline at end of file From 0cbf18f22784053fdb5fbcb19b0fe5971f49471c Mon Sep 17 00:00:00 2001 From: Ralf Anton Beier Date: Sat, 30 May 2026 12:24:13 +0200 Subject: [PATCH 2/2] =?UTF-8?q?chore(release):=20v0.11.6=20=E2=80=94=20wor?= =?UTF-8?q?kspace=20pin=20sweep=20+=20CHANGELOG=20(#186)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 17 +++++++++++++ Cargo.lock | 34 +++++++++++++------------- Cargo.toml | 2 +- MODULE.bazel | 2 +- crates/synth-backend-awsm/Cargo.toml | 2 +- crates/synth-backend-riscv/Cargo.toml | 4 +-- crates/synth-backend-wasker/Cargo.toml | 2 +- crates/synth-backend/Cargo.toml | 4 +-- crates/synth-cli/Cargo.toml | 16 ++++++------ crates/synth-frontend/Cargo.toml | 2 +- crates/synth-opt/Cargo.toml | 2 +- crates/synth-synthesis/Cargo.toml | 6 ++--- crates/synth-verify/Cargo.toml | 8 +++--- 13 files changed, 59 insertions(+), 42 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a17da3c5..95d4ad6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.11.6] - 2026-05-30 + +**Patch: encoder is now total under fuzzing (#186).** The `encoder_no_panic` +fuzz target (which runs with an empty corpus) intermittently found pre-existing +panics, making the Fuzz Smoke gate flaky. The remaining root — after the +PC/R15-operand fix in v0.11.4 (#185) — was arithmetic overflow in the ARM32 +branch encoders: `*offset - 2` overflow-panics at `i32::MIN` under +`-Cdebug-assertions`. Now uses `wrapping_sub` (total; identical for any real +branch offset). A 180s sweep then ran **8.8M executions with zero panics**. +Also adds a committed `fuzz/seed_corpus/encoder_no_panic/` (61 inputs) so CI's +60s run starts with coverage rather than exploring cold. The separate +`i64_lowering` fuzz finding (real clobber vs harness false-positive) is tracked +in #188. + +**Falsification statement.** v0.11.6 is wrong if `encoder_no_panic` panics on +any input (the encoder must return Ok or Err, never abort). + ## [0.11.5] - 2026-05-30 **Patch: high-register Thumb CMN (#184).** Closes the last sibling of the #180 diff --git a/Cargo.lock b/Cargo.lock index a83d1941..95d0dd8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1890,14 +1890,14 @@ dependencies = [ [[package]] name = "synth-abi" -version = "0.11.5" +version = "0.11.6" dependencies = [ "synth-wit", ] [[package]] name = "synth-analysis" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "synth-core", @@ -1906,7 +1906,7 @@ dependencies = [ [[package]] name = "synth-backend" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "synth-core", @@ -1916,7 +1916,7 @@ dependencies = [ [[package]] name = "synth-backend-awsm" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "synth-core", @@ -1925,7 +1925,7 @@ dependencies = [ [[package]] name = "synth-backend-riscv" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "proptest", @@ -1937,7 +1937,7 @@ dependencies = [ [[package]] name = "synth-backend-wasker" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "synth-core", @@ -1946,11 +1946,11 @@ dependencies = [ [[package]] name = "synth-cfg" -version = "0.11.5" +version = "0.11.6" [[package]] name = "synth-cli" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "clap", @@ -1972,7 +1972,7 @@ dependencies = [ [[package]] name = "synth-core" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "serde", @@ -1985,7 +1985,7 @@ dependencies = [ [[package]] name = "synth-frontend" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "synth-core", @@ -1999,14 +1999,14 @@ dependencies = [ [[package]] name = "synth-memory" -version = "0.11.5" +version = "0.11.6" dependencies = [ "bitflags", ] [[package]] name = "synth-opt" -version = "0.11.5" +version = "0.11.6" dependencies = [ "criterion", "synth-cfg", @@ -2014,11 +2014,11 @@ dependencies = [ [[package]] name = "synth-qemu" -version = "0.11.5" +version = "0.11.6" [[package]] name = "synth-synthesis" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "proptest", @@ -2033,7 +2033,7 @@ dependencies = [ [[package]] name = "synth-test" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "clap", @@ -2049,7 +2049,7 @@ dependencies = [ [[package]] name = "synth-verify" -version = "0.11.5" +version = "0.11.6" dependencies = [ "anyhow", "chrono", @@ -2067,7 +2067,7 @@ dependencies = [ [[package]] name = "synth-wit" -version = "0.11.5" +version = "0.11.6" [[package]] name = "tempfile" diff --git a/Cargo.toml b/Cargo.toml index 6a1418a4..d20a3d58 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,7 +27,7 @@ resolver = "2" # semver to publish, so the convention now catches up: workspace # version follows the release tag, bumped pre-tag in the release # checklist. See docs/release-process.md. -version = "0.11.5" +version = "0.11.6" edition = "2024" rust-version = "1.88" authors = ["PulseEngine Team"] diff --git a/MODULE.bazel b/MODULE.bazel index a0904e6a..f96f60bc 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -7,7 +7,7 @@ module( name = "synth", # Kept in lockstep with [workspace.package] version in Cargo.toml. # Both are bumped pre-tag — see docs/release-process.md. - version = "0.11.5", + version = "0.11.6", ) # Bazel dependencies diff --git a/crates/synth-backend-awsm/Cargo.toml b/crates/synth-backend-awsm/Cargo.toml index 81cb8bb8..c8367b57 100644 --- a/crates/synth-backend-awsm/Cargo.toml +++ b/crates/synth-backend-awsm/Cargo.toml @@ -11,6 +11,6 @@ categories.workspace = true description = "aWsm backend integration for the Synth compiler" [dependencies] -synth-core = { path = "../synth-core", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } anyhow.workspace = true thiserror.workspace = true diff --git a/crates/synth-backend-riscv/Cargo.toml b/crates/synth-backend-riscv/Cargo.toml index e44427b2..e9847be9 100644 --- a/crates/synth-backend-riscv/Cargo.toml +++ b/crates/synth-backend-riscv/Cargo.toml @@ -11,8 +11,8 @@ categories.workspace = true description = "RISC-V encoder, ELF builder, PMP allocator, and bare-metal startup for synth" [dependencies] -synth-core = { path = "../synth-core", version = "0.11.5" } -synth-synthesis = { path = "../synth-synthesis", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } +synth-synthesis = { path = "../synth-synthesis", version = "0.11.6" } anyhow.workspace = true thiserror.workspace = true tracing.workspace = true diff --git a/crates/synth-backend-wasker/Cargo.toml b/crates/synth-backend-wasker/Cargo.toml index 8df8f24b..b7953f68 100644 --- a/crates/synth-backend-wasker/Cargo.toml +++ b/crates/synth-backend-wasker/Cargo.toml @@ -11,6 +11,6 @@ categories.workspace = true description = "Wasker backend integration for the Synth compiler" [dependencies] -synth-core = { path = "../synth-core", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } anyhow.workspace = true thiserror.workspace = true diff --git a/crates/synth-backend/Cargo.toml b/crates/synth-backend/Cargo.toml index dbf7083c..c91374fc 100644 --- a/crates/synth-backend/Cargo.toml +++ b/crates/synth-backend/Cargo.toml @@ -15,7 +15,7 @@ default = ["arm-cortex-m"] arm-cortex-m = ["synth-synthesis"] [dependencies] -synth-core = { path = "../synth-core", version = "0.11.5" } -synth-synthesis = { path = "../synth-synthesis", version = "0.11.5", optional = true } +synth-core = { path = "../synth-core", version = "0.11.6" } +synth-synthesis = { path = "../synth-synthesis", version = "0.11.6", optional = true } anyhow.workspace = true thiserror.workspace = true diff --git a/crates/synth-cli/Cargo.toml b/crates/synth-cli/Cargo.toml index 357bc2f6..20d3eb15 100644 --- a/crates/synth-cli/Cargo.toml +++ b/crates/synth-cli/Cargo.toml @@ -27,18 +27,18 @@ verify = ["synth-verify"] # Path deps carry `version` so `cargo publish` rewrites them to the # crates.io coordinate. Bumping the workspace version requires # updating these in lockstep — see docs/release-process.md. -synth-core = { path = "../synth-core", version = "0.11.5" } -synth-frontend = { path = "../synth-frontend", version = "0.11.5" } -synth-synthesis = { path = "../synth-synthesis", version = "0.11.5" } -synth-backend = { path = "../synth-backend", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } +synth-frontend = { path = "../synth-frontend", version = "0.11.6" } +synth-synthesis = { path = "../synth-synthesis", version = "0.11.6" } +synth-backend = { path = "../synth-backend", version = "0.11.6" } # Optional external backends -synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.5", optional = true } -synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.5", optional = true } -synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.5", optional = true } +synth-backend-awsm = { path = "../synth-backend-awsm", version = "0.11.6", optional = true } +synth-backend-wasker = { path = "../synth-backend-wasker", version = "0.11.6", optional = true } +synth-backend-riscv = { path = "../synth-backend-riscv", version = "0.11.6", optional = true } # Optional verification (requires z3) -synth-verify = { path = "../synth-verify", version = "0.11.5", optional = true, features = ["z3-solver", "arm"] } +synth-verify = { path = "../synth-verify", version = "0.11.6", optional = true, features = ["z3-solver", "arm"] } # Optional PulseEngine WASM optimizer # Uncomment when loom crate is available: diff --git a/crates/synth-frontend/Cargo.toml b/crates/synth-frontend/Cargo.toml index 394d7020..c42396ea 100644 --- a/crates/synth-frontend/Cargo.toml +++ b/crates/synth-frontend/Cargo.toml @@ -14,7 +14,7 @@ description = "WASM/WAT parser and module decoder frontend for the Synth compile # Internal path deps carry an explicit version so `cargo publish` # can rewrite to the crates.io coordinate. `path` is used for # in-workspace builds; `version` is what crates.io sees. -synth-core = { path = "../synth-core", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } wasmparser.workspace = true wasm-encoder.workspace = true diff --git a/crates/synth-opt/Cargo.toml b/crates/synth-opt/Cargo.toml index 3c8a965e..c103352e 100644 --- a/crates/synth-opt/Cargo.toml +++ b/crates/synth-opt/Cargo.toml @@ -11,7 +11,7 @@ categories.workspace = true description = "Peephole optimization passes for the Synth compiler" [dependencies] -synth-cfg = { path = "../synth-cfg", version = "0.11.5" } +synth-cfg = { path = "../synth-cfg", version = "0.11.6" } [dev-dependencies] criterion = { version = "0.5", features = ["html_reports"] } diff --git a/crates/synth-synthesis/Cargo.toml b/crates/synth-synthesis/Cargo.toml index 6d8299b9..2775fcd3 100644 --- a/crates/synth-synthesis/Cargo.toml +++ b/crates/synth-synthesis/Cargo.toml @@ -11,9 +11,9 @@ categories.workspace = true description = "WASM-to-ARM instruction selection and peephole optimizer" [dependencies] -synth-core = { path = "../synth-core", version = "0.11.5" } -synth-cfg = { path = "../synth-cfg", version = "0.11.5" } -synth-opt = { path = "../synth-opt", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } +synth-cfg = { path = "../synth-cfg", version = "0.11.6" } +synth-opt = { path = "../synth-opt", version = "0.11.6" } serde.workspace = true anyhow.workspace = true thiserror.workspace = true diff --git a/crates/synth-verify/Cargo.toml b/crates/synth-verify/Cargo.toml index 800be3b5..335b8eb7 100644 --- a/crates/synth-verify/Cargo.toml +++ b/crates/synth-verify/Cargo.toml @@ -17,12 +17,12 @@ arm = ["synth-synthesis"] [dependencies] # Core dependencies (always required) -synth-core = { path = "../synth-core", version = "0.11.5" } -synth-cfg = { path = "../synth-cfg", version = "0.11.5" } -synth-opt = { path = "../synth-opt", version = "0.11.5" } +synth-core = { path = "../synth-core", version = "0.11.6" } +synth-cfg = { path = "../synth-cfg", version = "0.11.6" } +synth-opt = { path = "../synth-opt", version = "0.11.6" } # ARM synthesis (optional, behind 'arm' feature) -synth-synthesis = { path = "../synth-synthesis", version = "0.11.5", optional = true } +synth-synthesis = { path = "../synth-synthesis", version = "0.11.6", optional = true } # SMT solver for formal verification z3 = { version = "0.19", features = ["static-link-z3"], optional = true }