zig
zig copied to clipboard
stage2: reached unreachable on duplicate enum value
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