zig icon indicating copy to clipboard operation
zig copied to clipboard

stage2: reached unreachable on duplicate enum value

Open jcmoyer opened this issue 2 years ago • 0 comments

Zig Version

0.10.0-dev.3952+9e070b653

Steps to Reproduce

Attempt to compile:

const T = enum(u8) {
    a = 0x12,
    b = 0x12,
};

pub fn main() !void {
    const x: T = .a;
    _ = x;
}

Expected Behavior

A compile error (stage1 prints: error: enum tag value 18 already taken)

Actual Behavior

The compiler crashes with this stacktrace:

d:\Scratch\enumtest>d:\scratch\zig\stage3\bin\zig build
thread 5988 panic: reached unreachable code
D:\Scratch\zig\lib\std\debug.zig:281:14: 0x7ff635fb2829 in assert (zig.exe.obj)
    if (!ok) unreachable; // assertion failure
             ^
D:\Scratch\zig\lib\std\array_hash_map.zig:861:19: 0x7ff636c07f7c in putAssumeCapacityNoClobberContext (zig.exe.obj)
            if (@sizeOf(Context) != 0)
                  ^
D:\Scratch\zig\src\Sema.zig:2630:62: 0x7ff63695025e in zirEnumDecl (zig.exe.obj)
            enum_obj.values.putAssumeCapacityNoClobberContext(copied_tag_val, {}, .{
                                                             ^
D:\Scratch\zig\src\Sema.zig:928:67: 0x7ff6366ff1d1 in analyzeBodyInner (zig.exe.obj)
                    .enum_decl             => try sema.zirEnumDecl(          block, extended, inst),
                                                                  ^
D:\Scratch\zig\src\Sema.zig:626:45: 0x7ff636565bc0 in analyzeBodyBreak (zig.exe.obj)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
D:\Scratch\zig\src\Module.zig:4550:50: 0x7ff6365620a3 in semaDecl (zig.exe.obj)
    const result_ref = (try sema.analyzeBodyBreak(&block_scope, body)).?.operand;
                                                 ^
D:\Scratch\zig\src\Module.zig:4185:38: 0x7ff6363713e2 in ensureDeclAnalyzed (zig.exe.obj)
    const type_changed = mod.semaDecl(decl_index) catch |err| switch (err) {
                                     ^
D:\Scratch\zig\src\Sema.zig:25956:32: 0x7ff636bca9e0 in ensureDeclAnalyzed (zig.exe.obj)
    sema.mod.ensureDeclAnalyzed(decl_index) catch |err| {
                               ^
D:\Scratch\zig\src\Sema.zig:25998:32: 0x7ff636984ef6 in analyzeDeclRef (zig.exe.obj)
    try sema.ensureDeclAnalyzed(decl_index);
                               ^
D:\Scratch\zig\src\Sema.zig:25932:41: 0x7ff636b999c0 in analyzeDeclVal (zig.exe.obj)
    const decl_ref = sema.analyzeDeclRef(decl_index) catch |err| switch (err) {
                                        ^
D:\Scratch\zig\src\Sema.zig:5336:31: 0x7ff6368d2b47 in zirDeclVal (zig.exe.obj)
    return sema.analyzeDeclVal(block, src, decl);
                              ^
D:\Scratch\zig\src\Sema.zig:735:65: 0x7ff6366f5348 in analyzeBodyInner (zig.exe.obj)
            .decl_val                     => try sema.zirDeclVal(block, inst),
                                                                ^
D:\Scratch\zig\src\Sema.zig:609:30: 0x7ff6366f2d3e in analyzeBody (zig.exe.obj)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
D:\Scratch\zig\src\Module.zig:5570:21: 0x7ff63654e648 in analyzeFnBody (zig.exe.obj)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
D:\Scratch\zig\src\Module.zig:4271:40: 0x7ff6363702df in ensureFuncBodyAnalyzed (zig.exe.obj)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
D:\Scratch\zig\src\Sema.zig:25967:36: 0x7ff636ca0861 in ensureFuncBodyAnalyzed (zig.exe.obj)
    sema.mod.ensureFuncBodyAnalyzed(func) catch |err| {
                                   ^
D:\Scratch\zig\src\Sema.zig:28086:40: 0x7ff636a47bf0 in resolveInferredErrorSet (zig.exe.obj)
        try sema.ensureFuncBodyAnalyzed(ies.func);
                                       ^
D:\Scratch\zig\src\Sema.zig:26246:49: 0x7ff6369800c2 in analyzeIsNonErrComptimeOnly (zig.exe.obj)
                try sema.resolveInferredErrorSet(block, src, ies);
                                                ^
D:\Scratch\zig\src\Sema.zig:26273:56: 0x7ff636ba5c1c in analyzeIsNonErr (zig.exe.obj)
    const result = try sema.analyzeIsNonErrComptimeOnly(block, src, operand);
                                                       ^
D:\Scratch\zig\src\Sema.zig:15029:53: 0x7ff6368dd81e in zirIsNonErr (zig.exe.obj)
    return sema.analyzeIsNonErr(block, inst_data.src(), operand);
                                                    ^
D:\Scratch\zig\src\Sema.zig:770:66: 0x7ff6366f73d8 in analyzeBodyInner (zig.exe.obj)
            .is_non_err                   => try sema.zirIsNonErr(block, inst),
                                                                 ^
D:\Scratch\zig\src\Sema.zig:4850:34: 0x7ff636bc56d4 in resolveBlockBody (zig.exe.obj)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
D:\Scratch\zig\src\Sema.zig:4833:33: 0x7ff63697bcc8 in zirBlock (zig.exe.obj)
    return sema.resolveBlockBody(parent_block, src, &child_block, body, inst, &label.merges);
                                ^
D:\Scratch\zig\src\Sema.zig:1239:69: 0x7ff636704a9b in analyzeBodyInner (zig.exe.obj)
                if (!block.is_comptime) break :blk try sema.zirBlock(block, inst);
                                                                    ^
D:\Scratch\zig\src\Sema.zig:4850:34: 0x7ff636bc56d4 in resolveBlockBody (zig.exe.obj)
        if (sema.analyzeBodyInner(child_block, body)) |_| {
                                 ^
D:\Scratch\zig\src\Sema.zig:9743:49: 0x7ff6368ecac9 in zirSwitchBlock (zig.exe.obj)
                    return sema.resolveBlockBody(block, src, &child_block, body, inst, merges);
                                                ^
D:\Scratch\zig\src\Sema.zig:792:69: 0x7ff6366f884c in analyzeBodyInner (zig.exe.obj)
            .switch_block                 => try sema.zirSwitchBlock(block, inst),
                                                                    ^
D:\Scratch\zig\src\Sema.zig:609:30: 0x7ff6366f2d3e in analyzeBody (zig.exe.obj)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
D:\Scratch\zig\src\Sema.zig:6057:33: 0x7ff636b920cc in analyzeCall (zig.exe.obj)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
D:\Scratch\zig\src\Sema.zig:19460:28: 0x7ff636924f54 in zirBuiltinCall (zig.exe.obj)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
D:\Scratch\zig\src\Sema.zig:850:69: 0x7ff6366fbe84 in analyzeBodyInner (zig.exe.obj)
            .builtin_call                 => try sema.zirBuiltinCall(block, inst),
                                                                    ^
D:\Scratch\zig\src\Sema.zig:609:30: 0x7ff6366f2d3e in analyzeBody (zig.exe.obj)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
D:\Scratch\zig\src\Sema.zig:6057:33: 0x7ff636b920cc in analyzeCall (zig.exe.obj)
                sema.analyzeBody(&child_block, fn_info.body) catch |err| switch (err) {
                                ^
D:\Scratch\zig\src\Sema.zig:5595:28: 0x7ff6368cf3c5 in zirCall (zig.exe.obj)
    return sema.analyzeCall(block, func, func_src, call_src, modifier, ensure_result_used, resolved_args, bound_arg_src);
                           ^
D:\Scratch\zig\src\Sema.zig:725:62: 0x7ff6366f498d in analyzeBodyInner (zig.exe.obj)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
D:\Scratch\zig\src\Sema.zig:626:45: 0x7ff636565bc0 in analyzeBodyBreak (zig.exe.obj)
    const break_inst = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                                            ^
D:\Scratch\zig\src\Sema.zig:591:50: 0x7ff636b8bfc6 in resolveBody (zig.exe.obj)
    const break_data = (try sema.analyzeBodyBreak(block, body)) orelse
                                                 ^
D:\Scratch\zig\src\Sema.zig:5588:46: 0x7ff6368cf0a2 in zirCall (zig.exe.obj)
        const resolved = try sema.resolveBody(block, args_body[arg_start..arg_end], inst);
                                             ^
D:\Scratch\zig\src\Sema.zig:725:62: 0x7ff6366f498d in analyzeBodyInner (zig.exe.obj)
            .call                         => try sema.zirCall(block, inst),
                                                             ^
D:\Scratch\zig\src\Sema.zig:609:30: 0x7ff6366f2d3e in analyzeBody (zig.exe.obj)
    _ = sema.analyzeBodyInner(block, body) catch |err| switch (err) {
                             ^
D:\Scratch\zig\src\Module.zig:5570:21: 0x7ff63654e648 in analyzeFnBody (zig.exe.obj)
    sema.analyzeBody(&inner_block, fn_info.body) catch |err| switch (err) {
                    ^
D:\Scratch\zig\src\Module.zig:4271:40: 0x7ff6363702df in ensureFuncBodyAnalyzed (zig.exe.obj)
            var air = mod.analyzeFnBody(func, sema_arena) catch |err| switch (err) {
                                       ^
D:\Scratch\zig\src\Compilation.zig:2982:42: 0x7ff63636e7ac in processOneJob (zig.exe.obj)
            module.ensureFuncBodyAnalyzed(func) catch |err| switch (err) {
                                         ^
D:\Scratch\zig\src\Compilation.zig:2920:30: 0x7ff63626fb49 in performAllTheWork (zig.exe.obj)
            try processOneJob(comp, work_item);
                             ^
D:\Scratch\zig\src\Compilation.zig:2260:31: 0x7ff63626c672 in update (zig.exe.obj)
    try comp.performAllTheWork(main_progress_node);
                              ^
D:\Scratch\zig\src\main.zig:3360:20: 0x7ff636295534 in updateModule (zig.exe.obj)
    try comp.update();
                   ^
D:\Scratch\zig\src\main.zig:3034:17: 0x7ff63602cb83 in buildOutputType (zig.exe.obj)
    updateModule(gpa, comp, hook) catch |err| switch (err) {
                ^
D:\Scratch\zig\src\main.zig:230:31: 0x7ff635fb1013 in mainArgs (zig.exe.obj)
        return buildOutputType(gpa, arena, args, .{ .build = .Exe });
                              ^
D:\Scratch\zig\src\stage1.zig:48:24: 0x7ff635fb0b99 in main (zig.exe.obj)
        stage2.mainArgs(gpa, arena, args) catch unreachable;
                       ^
Unable to dump stack trace: InvalidDebugInfo
error: enumtest...
error: The following command exited with error code 3:
d:\scratch\zig\stage3\bin\zig.exe build-exe D:\Scratch\enumtest\src\main.zig --cache-dir D:\Scratch\enumtest\zig-cache --global-cache-dir C:\Users\jcmoyer\AppData\Local\zig --name enumtest --enable-cache
error: the following build command failed with exit code 3:
d:\Scratch\enumtest\zig-cache\o\04632f084fd7e214096e171e34124c06\build.exe d:\scratch\zig\stage3\bin\zig.exe d:\Scratch\enumtest d:\Scratch\enumtest\zig-cache C:\Users\jcmoyer\AppData\Local\zig

jcmoyer avatar Sep 10 '22 14:09 jcmoyer