motiejus/zig

fork of https://codeberg.org/ziglang/zig
git clone https://git.jakstys.lt/motiejus/zig.git
Log | Tree | Refs | README | LICENSE

commit a57ce506f145159540c36f8e83de6279f36df0ae (tree)
parent c3bef00f7499ea37cf5ae8d6f5e008ddf49ba583
Author: Motiejus Jakštys <motiejus@jakstys.lt>
Date:   Sun, 15 Mar 2026 17:33:25 +0000

zig0: fix switch bugs, expand corpus to 411 stdlib files

Bug fixes:
- switchExprErrUnionInner: remove spurious dbg_var_val emission
  for error capture after body — Zig never emits this
- whileExpr/forExpr: set allow_unlabeled_control_flow=false before
  else branch, matching Zig (AstGen.zig:6666-6669, 6957-6958).
  Fixes break_target=NULL_INST being used as block ref.

Corpus expansion:
- Expand corpus_files from 6 to 411 stdlib files (all .zig > 3KB)
- 2 files still failing (aes_ocb.zig, SmpAllocator.zig) commented
  out with TODO — both have 4 missing extra entries (likely a hash)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

Diffstat:
Mstage0/astgen.c | 14++++----------
Mstage0/astgen_test.zig | 412++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 414 insertions(+), 12 deletions(-)

diff --git a/stage0/astgen.c b/stage0/astgen.c @@ -9814,7 +9814,8 @@ static uint32_t whileExpr(GenZir* gz, Scope* scope, ResultInfo ri, } // Remove continue/break blocks so control flow applies to outer - // loops (AstGen.zig:6783-6784). + // loops (AstGen.zig:6666-6669). + loop_scope.allow_unlabeled_control_flow = false; loop_scope.continue_target = NULL_INST; loop_scope.break_target = NULL_INST; uint32_t else_result = fullBodyExpr(&else_scope, else_sub_scope, @@ -10151,7 +10152,8 @@ static uint32_t forExpr(GenZir* gz, Scope* scope, ResultInfo ri, uint32_t node, if (else_node != 0) { // Issue 2: evaluate else expression (AstGen.zig:7069-7081). // Remove continue/break blocks so that control flow applies - // to outer loops (AstGen.zig:7073-7074). + // to outer loops (AstGen.zig:6957-6958). + loop_scope.allow_unlabeled_control_flow = false; loop_scope.continue_target = NULL_INST; loop_scope.break_target = NULL_INST; uint32_t else_result = fullBodyExpr(&else_scope, &else_scope.base, @@ -10688,14 +10690,6 @@ static uint32_t switchExprErrUnionInner(GenZir* parent_gz, Scope* scope, uint32_t result = fullBodyExpr(&scratch_scope, sub_scope, block_scope.break_result_info, body_node); - bool uses_err = err_scope_used; - // cppcheck-suppress knownConditionTrueFalse - if (uses_err) { // modified through is_used_or_discarded ptr - genZir_addDbgVar(&scratch_scope, ZIR_INST_DBG_VAR_VAL, err_name, - switch_inst + ZIR_REF_START_INDEX); - any_maybe_runtime_capture = true; - } - if (!genZir_endsWithNoReturn(&scratch_scope)) { if (do_err_trace) restoreErrRetIndex(&scratch_scope, switch_inst, diff --git a/stage0/astgen_test.zig b/stage0/astgen_test.zig @@ -1173,9 +1173,418 @@ fn expectEqualData( const corpus_files = .{ "astgen_test.zig", - // "../build.zig", // tested separately (needs extended opcode porting) + "../build.zig", "parser_test.zig", "tokenizer_test.zig", + "../lib/std/array_hash_map.zig", + "../lib/std/array_list.zig", + "../lib/std/ascii.zig", + "../lib/std/atomic.zig", + "../lib/std/base64.zig", + "../lib/std/bit_set.zig", + "../lib/std/buf_map.zig", + "../lib/std/buf_set.zig", + "../lib/std/Build/abi.zig", + "../lib/std/Build/Cache/DepTokenizer.zig", + "../lib/std/Build/Cache/Path.zig", + "../lib/std/Build/Cache.zig", + "../lib/std/Build/Fuzz.zig", + "../lib/std/Build/Module.zig", + "../lib/std/Build/Step/CheckObject.zig", + "../lib/std/Build/Step/Compile.zig", + "../lib/std/Build/Step/ConfigHeader.zig", + "../lib/std/Build/Step/InstallArtifact.zig", + "../lib/std/Build/Step/InstallDir.zig", + "../lib/std/Build/Step/ObjCopy.zig", + "../lib/std/Build/Step/Options.zig", + "../lib/std/Build/Step/Run.zig", + "../lib/std/Build/Step/TranslateC.zig", + "../lib/std/Build/Step/UpdateSourceFiles.zig", + "../lib/std/Build/Step/WriteFile.zig", + "../lib/std/Build/Step.zig", + "../lib/std/Build/Watch/FsEvents.zig", + "../lib/std/Build/Watch.zig", + "../lib/std/Build/WebServer.zig", + "../lib/std/Build.zig", + "../lib/std/builtin/assembly.zig", + "../lib/std/builtin.zig", + "../lib/std/c/darwin/dispatch.zig", + "../lib/std/c/darwin.zig", + "../lib/std/c/dragonfly.zig", + "../lib/std/c/freebsd.zig", + "../lib/std/c/haiku.zig", + "../lib/std/c/illumos.zig", + "../lib/std/c/netbsd.zig", + "../lib/std/coff.zig", + "../lib/std/compress/flate/Compress.zig", + "../lib/std/compress/flate/Decompress.zig", + "../lib/std/compress/flate/token.zig", + "../lib/std/compress/flate.zig", + "../lib/std/compress/lzma2.zig", + "../lib/std/compress/lzma.zig", + "../lib/std/compress/xz/Decompress.zig", + "../lib/std/compress/zstd/Decompress.zig", + "../lib/std/compress/zstd.zig", + "../lib/std/c/openbsd.zig", + "../lib/std/crypto/25519/curve25519.zig", + "../lib/std/crypto/25519/ed25519.zig", + "../lib/std/crypto/25519/edwards25519.zig", + "../lib/std/crypto/25519/field.zig", + "../lib/std/crypto/25519/ristretto255.zig", + "../lib/std/crypto/25519/scalar.zig", + "../lib/std/crypto/25519/x25519.zig", + "../lib/std/crypto/aegis.zig", + "../lib/std/crypto/aes/aesni.zig", + "../lib/std/crypto/aes/armcrypto.zig", + "../lib/std/crypto/aes_ccm.zig", + "../lib/std/crypto/aes_gcm_siv.zig", + "../lib/std/crypto/aes_gcm.zig", + // "../lib/std/crypto/aes_ocb.zig", // TODO: 4 extra entries missing + "../lib/std/crypto/aes_siv.zig", + "../lib/std/crypto/aes/soft.zig", + "../lib/std/crypto/aes.zig", + "../lib/std/crypto/argon2.zig", + "../lib/std/crypto/ascon.zig", + "../lib/std/crypto/bcrypt.zig", + "../lib/std/crypto/benchmark.zig", + "../lib/std/crypto/blake2.zig", + "../lib/std/crypto/blake3.zig", + "../lib/std/crypto/cbc_mac.zig", + "../lib/std/crypto/Certificate/Bundle/macos.zig", + "../lib/std/crypto/Certificate/Bundle.zig", + "../lib/std/crypto/Certificate.zig", + "../lib/std/crypto/chacha20.zig", + "../lib/std/crypto/cmac.zig", + "../lib/std/crypto/codecs/asn1/der/Decoder.zig", + "../lib/std/crypto/codecs/asn1/der/Encoder.zig", + "../lib/std/crypto/codecs/asn1/Oid.zig", + "../lib/std/crypto/codecs/asn1.zig", + "../lib/std/crypto/codecs/base64_hex_ct.zig", + "../lib/std/crypto/ecdsa.zig", + "../lib/std/crypto/ff.zig", + "../lib/std/crypto/ghash_polyval.zig", + "../lib/std/crypto/hkdf.zig", + "../lib/std/crypto/hmac.zig", + "../lib/std/crypto/hybrid_kem.zig", + "../lib/std/crypto/isap.zig", + "../lib/std/crypto/kangarootwelve.zig", + "../lib/std/crypto/keccak_p.zig", + "../lib/std/crypto/md5.zig", + "../lib/std/crypto/ml_dsa.zig", + "../lib/std/crypto/ml_kem.zig", + "../lib/std/crypto/modes.zig", + "../lib/std/crypto/pbkdf2.zig", + "../lib/std/crypto/pcurves/common.zig", + "../lib/std/crypto/pcurves/p256/p256_64.zig", + "../lib/std/crypto/pcurves/p256/p256_scalar_64.zig", + "../lib/std/crypto/pcurves/p256/scalar.zig", + "../lib/std/crypto/pcurves/p256.zig", + "../lib/std/crypto/pcurves/p384/p384_64.zig", + "../lib/std/crypto/pcurves/p384/p384_scalar_64.zig", + "../lib/std/crypto/pcurves/p384/scalar.zig", + "../lib/std/crypto/pcurves/p384.zig", + "../lib/std/crypto/pcurves/secp256k1/scalar.zig", + "../lib/std/crypto/pcurves/secp256k1/secp256k1_64.zig", + "../lib/std/crypto/pcurves/secp256k1/secp256k1_scalar_64.zig", + "../lib/std/crypto/pcurves/secp256k1.zig", + "../lib/std/crypto/phc_encoding.zig", + "../lib/std/crypto/poly1305.zig", + "../lib/std/crypto/salsa20.zig", + "../lib/std/crypto/scrypt.zig", + "../lib/std/crypto/Sha1.zig", + "../lib/std/crypto/sha2.zig", + "../lib/std/crypto/sha3.zig", + "../lib/std/crypto/siphash.zig", + "../lib/std/crypto/timing_safe.zig", + "../lib/std/crypto/tls/Client.zig", + "../lib/std/crypto/tls.zig", + "../lib/std/crypto.zig", + "../lib/std/c/serenity.zig", + "../lib/std/c.zig", + "../lib/std/debug/Coverage.zig", + "../lib/std/debug/cpu_context.zig", + "../lib/std/debug/Dwarf/expression.zig", + "../lib/std/debug/Dwarf/SelfUnwinder.zig", + "../lib/std/debug/Dwarf/Unwind/VirtualMachine.zig", + "../lib/std/debug/Dwarf/Unwind.zig", + "../lib/std/debug/Dwarf.zig", + "../lib/std/debug/ElfFile.zig", + "../lib/std/debug/Info.zig", + "../lib/std/debug/MachOFile.zig", + "../lib/std/debug/Pdb.zig", + "../lib/std/debug/SelfInfo/Elf.zig", + "../lib/std/debug/SelfInfo/MachO.zig", + "../lib/std/debug/SelfInfo/Windows.zig", + "../lib/std/debug/simple_panic.zig", + "../lib/std/debug.zig", + "../lib/std/deque.zig", + "../lib/std/DoublyLinkedList.zig", + "../lib/std/dwarf/AT.zig", + "../lib/std/dwarf/OP.zig", + "../lib/std/dwarf/TAG.zig", + "../lib/std/dwarf.zig", + "../lib/std/dynamic_library.zig", + "../lib/std/elf.zig", + "../lib/std/enums.zig", + "../lib/std/fmt/float.zig", + "../lib/std/fmt/parse_float/common.zig", + "../lib/std/fmt/parse_float/convert_eisel_lemire.zig", + "../lib/std/fmt/parse_float/convert_fast.zig", + "../lib/std/fmt/parse_float/convert_slow.zig", + "../lib/std/fmt/parse_float/decimal.zig", + "../lib/std/fmt/parse_float/FloatInfo.zig", + "../lib/std/fmt/parse_float/FloatStream.zig", + "../lib/std/fmt/parse_float/parse.zig", + "../lib/std/fmt/parse_float.zig", + "../lib/std/fmt.zig", + "../lib/std/fs/path.zig", + "../lib/std/gpu.zig", + "../lib/std/hash/auto_hash.zig", + "../lib/std/hash/benchmark.zig", + "../lib/std/hash/cityhash.zig", + "../lib/std/hash/crc/impl.zig", + "../lib/std/hash/crc.zig", + "../lib/std/hash_map.zig", + "../lib/std/hash/murmur.zig", + "../lib/std/hash/wyhash.zig", + "../lib/std/hash/xxhash.zig", + "../lib/std/hash.zig", + "../lib/std/heap/ArenaAllocator.zig", + "../lib/std/heap/BrkAllocator.zig", + "../lib/std/heap/debug_allocator.zig", + "../lib/std/heap/FixedBufferAllocator.zig", + "../lib/std/heap/memory_pool.zig", + "../lib/std/heap/PageAllocator.zig", + // "../lib/std/heap/SmpAllocator.zig", // TODO: 4 extra entries missing + "../lib/std/heap.zig", + "../lib/std/http/ChunkParser.zig", + "../lib/std/http/Client.zig", + "../lib/std/http/HeaderIterator.zig", + "../lib/std/http/HeadParser.zig", + "../lib/std/http/Server.zig", + "../lib/std/http.zig", + "../lib/std/Io/Dir.zig", + "../lib/std/Io/Dispatch.zig", + "../lib/std/Io/fiber.zig", + "../lib/std/Io/File/MemoryMap.zig", + "../lib/std/Io/File/MultiReader.zig", + "../lib/std/Io/File/Reader.zig", + "../lib/std/Io/File/Writer.zig", + "../lib/std/Io/File.zig", + "../lib/std/Io/Kqueue.zig", + "../lib/std/Io/net/HostName.zig", + "../lib/std/Io/net.zig", + "../lib/std/Io/Reader/Limited.zig", + "../lib/std/Io/Reader.zig", + "../lib/std/Io/RwLock.zig", + "../lib/std/Io/Terminal.zig", + "../lib/std/Io/Threaded.zig", + "../lib/std/Io/Uring.zig", + "../lib/std/Io/Writer.zig", + "../lib/std/Io.zig", + "../lib/std/json/dynamic.zig", + "../lib/std/json/hashmap.zig", + "../lib/std/json/Scanner.zig", + "../lib/std/json/static.zig", + "../lib/std/json/Stringify.zig", + "../lib/std/json.zig", + "../lib/std/leb128.zig", + "../lib/std/log.zig", + "../lib/std/macho.zig", + "../lib/std/math/acos.zig", + "../lib/std/math/asinh.zig", + "../lib/std/math/asin.zig", + "../lib/std/math/atan2.zig", + "../lib/std/math/atanh.zig", + "../lib/std/math/atan.zig", + "../lib/std/math/big/int.zig", + "../lib/std/math/cbrt.zig", + "../lib/std/math/complex/cosh.zig", + "../lib/std/math/complex/exp.zig", + "../lib/std/math/complex/sinh.zig", + "../lib/std/math/complex/sqrt.zig", + "../lib/std/math/complex/tanh.zig", + "../lib/std/math/complex.zig", + "../lib/std/math/cosh.zig", + "../lib/std/math/expm1.zig", + "../lib/std/math/float.zig", + "../lib/std/math/frexp.zig", + "../lib/std/math/gamma.zig", + "../lib/std/math/hypot.zig", + "../lib/std/math/ilogb.zig", + "../lib/std/math/ldexp.zig", + "../lib/std/math/log10.zig", + "../lib/std/math/log1p.zig", + "../lib/std/math/log_int.zig", + "../lib/std/math/modf.zig", + "../lib/std/math/nextafter.zig", + "../lib/std/math/powi.zig", + "../lib/std/math/pow.zig", + "../lib/std/math/sinh.zig", + "../lib/std/math/tanh.zig", + "../lib/std/math.zig", + "../lib/std/mem/Allocator.zig", + "../lib/std/mem.zig", + "../lib/std/meta/trailer_flags.zig", + "../lib/std/meta.zig", + "../lib/std/multi_array_list.zig", + "../lib/std/os/emscripten.zig", + "../lib/std/os/linux/aarch64.zig", + "../lib/std/os/linux/arm.zig", + "../lib/std/os/linux/bpf/btf.zig", + "../lib/std/os/linux/bpf/helpers.zig", + "../lib/std/os/linux/bpf.zig", + "../lib/std/os/linux/hexagon.zig", + "../lib/std/os/linux/io_uring_sqe.zig", + "../lib/std/os/linux/IoUring.zig", + "../lib/std/os/linux/loongarch64.zig", + "../lib/std/os/linux/m68k.zig", + "../lib/std/os/linux/mips64.zig", + "../lib/std/os/linux/mipsn32.zig", + "../lib/std/os/linux/mips.zig", + "../lib/std/os/linux/or1k.zig", + "../lib/std/os/linux/powerpc64.zig", + "../lib/std/os/linux/powerpc.zig", + "../lib/std/os/linux/riscv32.zig", + "../lib/std/os/linux/riscv64.zig", + "../lib/std/os/linux/s390x.zig", + "../lib/std/os/linux/seccomp.zig", + "../lib/std/os/linux/sparc64.zig", + "../lib/std/os/linux/syscalls.zig", + "../lib/std/os/linux/thumb.zig", + "../lib/std/os/linux/tls.zig", + "../lib/std/os/linux/vdso.zig", + "../lib/std/os/linux/x32.zig", + "../lib/std/os/linux/x86_64.zig", + "../lib/std/os/linux/x86.zig", + "../lib/std/os/linux.zig", + "../lib/std/os/plan9.zig", + "../lib/std/os/uefi/device_path.zig", + "../lib/std/os/uefi/pool_allocator.zig", + "../lib/std/os/uefi/protocol/block_io.zig", + "../lib/std/os/uefi/protocol/device_path.zig", + "../lib/std/os/uefi/protocol/file.zig", + "../lib/std/os/uefi/protocol/graphics_output.zig", + "../lib/std/os/uefi/protocol/hii_database.zig", + "../lib/std/os/uefi/protocol/ip6_config.zig", + "../lib/std/os/uefi/protocol/ip6.zig", + "../lib/std/os/uefi/protocol/managed_network.zig", + "../lib/std/os/uefi/protocol/rng.zig", + "../lib/std/os/uefi/protocol/serial_io.zig", + "../lib/std/os/uefi/protocol/simple_network.zig", + "../lib/std/os/uefi/protocol/simple_text_input_ex.zig", + "../lib/std/os/uefi/protocol/simple_text_output.zig", + "../lib/std/os/uefi/protocol/udp6.zig", + "../lib/std/os/uefi/status.zig", + "../lib/std/os/uefi/tables/boot_services.zig", + "../lib/std/os/uefi/tables/runtime_services.zig", + "../lib/std/os/uefi/tables.zig", + "../lib/std/os/uefi.zig", + "../lib/std/os/wasi.zig", + "../lib/std/os/windows/lang.zig", + "../lib/std/os/windows/nls.zig", + "../lib/std/os/windows/ntdll.zig", + "../lib/std/os/windows/ntstatus.zig", + "../lib/std/os/windows/sublang.zig", + "../lib/std/os/windows/win32error.zig", + "../lib/std/os/windows/ws2_32.zig", + "../lib/std/os/windows.zig", + "../lib/std/pdb.zig", + "../lib/std/pie.zig", + "../lib/std/posix.zig", + "../lib/std/priority_dequeue.zig", + "../lib/std/priority_queue.zig", + "../lib/std/process/Args.zig", + "../lib/std/process/Child.zig", + "../lib/std/process/Environ.zig", + "../lib/std/process.zig", + "../lib/std/Progress.zig", + "../lib/std/Random/benchmark.zig", + "../lib/std/Random/Isaac64.zig", + "../lib/std/Random/RomuTrio.zig", + "../lib/std/Random/Sfc64.zig", + "../lib/std/Random/Xoroshiro128.zig", + "../lib/std/Random/Xoshiro256.zig", + "../lib/std/Random.zig", + "../lib/std/Random/ziggurat.zig", + "../lib/std/SemanticVersion.zig", + "../lib/std/simd.zig", + "../lib/std/SinglyLinkedList.zig", + "../lib/std/sort/block.zig", + "../lib/std/sort/pdq.zig", + "../lib/std/sort.zig", + "../lib/std/start.zig", + "../lib/std/static_string_map.zig", + "../lib/std/std.zig", + "../lib/std/Target/aarch64.zig", + "../lib/std/Target/amdgcn.zig", + "../lib/std/Target/arm.zig", + "../lib/std/Target/avr.zig", + "../lib/std/Target/csky.zig", + "../lib/std/Target/hexagon.zig", + "../lib/std/Target/hppa.zig", + "../lib/std/Target/loongarch.zig", + "../lib/std/Target/m68k.zig", + "../lib/std/Target/mips.zig", + "../lib/std/Target/nvptx.zig", + "../lib/std/Target/powerpc.zig", + "../lib/std/Target/Query.zig", + "../lib/std/Target/riscv.zig", + "../lib/std/Target/s390x.zig", + "../lib/std/Target/sparc.zig", + "../lib/std/Target/spirv.zig", + "../lib/std/Target/wasm.zig", + "../lib/std/Target/x86.zig", + "../lib/std/Target/xtensa.zig", + "../lib/std/Target.zig", + "../lib/std/tar/Writer.zig", + "../lib/std/tar.zig", + "../lib/std/Thread.zig", + "../lib/std/time/epoch.zig", + "../lib/std/treap.zig", + "../lib/std/tz.zig", + "../lib/std/unicode.zig", + "../lib/std/Uri.zig", + "../lib/std/valgrind/memcheck.zig", + "../lib/std/valgrind.zig", + "../lib/std/wasm.zig", + "../lib/std/zig/AstGen.zig", + "../lib/std/zig/Ast/Render.zig", + "../lib/std/zig/AstRlAnnotate.zig", + "../lib/std/zig/Ast.zig", + "../lib/std/zig/BuiltinFn.zig", + "../lib/std/zig/c_translation/builtins.zig", + "../lib/std/zig/c_translation/helpers.zig", + "../lib/std/zig/ErrorBundle.zig", + "../lib/std/zig/LibCDirs.zig", + "../lib/std/zig/LibCInstallation.zig", + "../lib/std/zig/llvm/BitcodeReader.zig", + "../lib/std/zig/llvm/bitcode_writer.zig", + "../lib/std/zig/llvm/Builder.zig", + "../lib/std/zig/llvm/ir.zig", + "../lib/std/zig/number_literal.zig", + "../lib/std/zig/Parse.zig", + "../lib/std/zig/Server.zig", + "../lib/std/zig/string_literal.zig", + "../lib/std/zig/system/arm.zig", + "../lib/std/zig/system/darwin/macos.zig", + "../lib/std/zig/system/linux.zig", + "../lib/std/zig/system/NativePaths.zig", + "../lib/std/zig/system/windows.zig", + "../lib/std/zig/system/x86.zig", + "../lib/std/zig/system.zig", + "../lib/std/zig/target.zig", + "../lib/std/zig/tokenizer.zig", + "../lib/std/zig/TokenSmith.zig", + "../lib/std/zig/WindowsSdk.zig", + "../lib/std/zig.zig", + "../lib/std/zig/Zir.zig", + "../lib/std/zig/Zoir.zig", + "../lib/std/zig/ZonGen.zig", + "../lib/std/zip.zig", + "../lib/std/zon/parse.zig", + "../lib/std/zon/Serializer.zig", + "../lib/std/zon/stringify.zig", }; pub fn corpusCheck(gpa: Allocator, source: [:0]const u8) !void { @@ -1570,7 +1979,6 @@ test "astgen: 4-arg TypeOf" { } test "astgen: corpus" { - // TODO: port switch expression rewrite to master const gpa = std.testing.allocator; var any_fail = false;