Open
Description
Zig Version
0.15.0 (cffa98e)
Steps to Reproduce and Observed Behavior
pub fn next(t: *Tokenizer) Structure.Token {}
test next {
loop: switch (enum { start }.start) {
.start => {
continue :loop .start;
},
}
}
const Tokenizer = @This();
Results in:
thread 15643 panic: reached unreachable code
/home/tau/tmp/zig/lib/std/debug.zig:558:14: 0x17dbebe in assert (std.zig)
if (!ok) unreachable; // assertion failure
^
/home/tau/tmp/zig/lib/std/math.zig:1099:11: 0x19a61a1 in isPowerOfTwo__anon_40390 (std.zig)
assert(int > 0);
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:163918:34: 0x480b809 in allocRegOrMemAdvanced (main.zig)
if (std.math.isPowerOfTwo(abi_size) and abi_size <= @as(u32, max_abi_size: switch (ty.zigTypeTag(zcu)) {
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:163903:38: 0x480c068 in allocRegOrMem (main.zig)
return self.allocRegOrMemAdvanced(self.typeOfIndex(inst), inst, reg_ok);
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:175352:48: 0x6127393 in airLoopSwitchBr (main.zig)
const mat_cond = try self.allocRegOrMem(inst, true);
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:85190:54: 0x61dd4d3 in genBody (main.zig)
.loop_switch_br => try cg.airLoopSwitchBr(inst),
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:2344:25: 0x5bed0d0 in gen (main.zig)
try self.genBody(self.air.getMainBody());
^
/home/tau/tmp/zig/src/arch/x86_64/CodeGen.zig:1086:17: 0x5762da5 in generate (main.zig)
function.gen() catch |err| switch (err) {
^
/home/tau/tmp/zig/src/codegen.zig:111:51: 0x5130ab9 in generateFunction (main.zig)
return importBackend(backend).generate(lf, pt, src_loc, func_index, air, liveness, code, debug_output);
^
/home/tau/tmp/zig/src/link/Elf/ZigObject.zig:1441:33: 0x4ba2b8c in updateFunc (main.zig)
try codegen.generateFunction(
^
/home/tau/tmp/zig/src/link/Elf.zig:2403:44: 0x4458acc in updateFunc (main.zig)
return self.zigObjectPtr().?.updateFunc(self, pt, func_index, air, liveness);
^
/home/tau/tmp/zig/src/link.zig:745:82: 0x3b5ca25 in updateFunc (main.zig)
return @as(*tag.Type(), @fieldParentPtr("base", base)).updateFunc(pt, func_index, air, liveness);
^
/home/tau/tmp/zig/src/Zcu/PerThread.zig:1788:22: 0x31ff83d in linkerUpdateFunc (main.zig)
lf.updateFunc(pt, func_index, air.*, liveness) catch |err| switch (err) {
^
/home/tau/tmp/zig/src/link.zig:1605:36: 0x2bc0e56 in doTask (main.zig)
pt.linkerUpdateFunc(func.func, &air) catch |err| switch (err) {
^
/home/tau/tmp/zig/src/link.zig:1402:34: 0x2554f32 in flushTaskQueue (main.zig)
for (tasks) |task| doTask(comp, tid, task);
^
/home/tau/tmp/zig/lib/std/Thread/Pool.zig:180:50: 0x25556fe in runFn (std.zig)
@call(.auto, func, .{id.?} ++ closure.arguments);
^
/home/tau/tmp/zig/lib/std/Thread/Pool.zig:293:27: 0x24ce111 in worker (std.zig)
runnable.runFn(runnable, id);
^
/home/tau/tmp/zig/lib/std/Thread.zig:510:13: 0x202b51f in callFn__anon_189890 (std.zig)
@call(.auto, f, args);
^
/home/tau/tmp/zig/lib/std/Thread.zig:1403:30: 0x1d9a773 in entryFn (std.zig)
return callFn(f, self.fn_args);
^
/home/tau/tmp/zig/lib/std/os/linux/x86_64.zig:126:5: 0x202b620 in clone (std.zig)
asm volatile (
^
???:?:?: 0x0 in ??? (???)
Expected Behavior
The test should compile and never terminate.