Skip to content

unreachable error on bitcasting packed struct #14578

@tauoverpi

Description

@tauoverpi

Zig Version

0.11.0-dev.1580+a5b34a61a and 0.11.0-dev.1571+c1f71963a

Steps to Reproduce and Observed Behavior

Run `zig test on the following:

const std = @import("std");

pub const Request = packed struct {
    nr: u8,
    io_type: u8,
    size: u14,
    dir: u2,
};

fn IOR(comptime T: type) u32 {
    const request = Request{
        .dir = 0,
        .size = @sizeOf(T),
        .io_type = 0,
        .nr = 0,
    };
    return @bitCast(u32, request);
}

test {
    _ = IOR(struct { x: u32 });
}
><> ~/play/zig/zig-master/stage3/bin/zig test rep.zig 
thread 10620 panic: reached unreachable code
Analyzing rep.zig: rep.zig:IOR__anon_1022
      %15 = dbg_block_begin()
      %16 = dbg_stmt(2, 5)
      %17 = alloc_inferred() node_offset:11:5 to :11:10
      %18 = decl_val("Request") token_offset:11:21 to :11:28
      %19 = validate_struct_init_ty(%18) node_offset:11:21 to :11:29
      %20 = coerce_result_ptr(%18, %17) node_offset:11:21 to :11:29
      %21 = field_ptr_init(%20, "dir") node_offset:12:16 to :12:17
      %22 = store_node(%21, @Zir.Inst.Ref.zero) node_offset:12:16 to :12:17
      %23 = field_ptr_init(%20, "size") node_offset:13:17 to :13:27
      %24 = size_of(%13) node_offset:13:17 to :13:27
      %25 = store_node(%23, %24) node_offset:13:17 to :13:27
      %26 = field_ptr_init(%20, "io_type") node_offset:14:20 to :14:21
      %27 = store_node(%26, @Zir.Inst.Ref.zero) node_offset:14:20 to :14:21
      %28 = field_ptr_init(%20, "nr") node_offset:15:15 to :15:16
      %29 = store_node(%28, @Zir.Inst.Ref.zero) node_offset:15:15 to :15:16
      %30 = validate_struct_init({
        %21 = field_ptr_init(%20, "dir") node_offset:12:16 to :12:17
        %23 = field_ptr_init(%20, "size") node_offset:13:17 to :13:27
        %26 = field_ptr_init(%20, "io_type") node_offset:14:20 to :14:21
        %28 = field_ptr_init(%20, "nr") node_offset:15:15 to :15:16
      }) node_offset:11:21 to :11:29
      %31 = resolve_inferred_alloc(%17) node_offset:11:5 to :11:10
      %32 = make_ptr_const(%17) node_offset:11:5 to :11:10
      %33 = dbg_var_ptr(%32, "request")
      %34 = dbg_stmt(8, 5)
      %35 = ret_type() node_offset:17:5 to :17:34
      %36 = load(%32) node_offset:17:26 to :17:33
    > %37 = bitcast(@Zir.Inst.Ref.u32_type, %36) node_offset:17:12 to :17:34
      %38 = as_node(%35, %37) node_offset:17:12 to :17:34
      %39 = restore_err_ret_index(@Zir.Inst.Ref.none, @Zir.Inst.Ref.none)
      %40 = dbg_stmt(8, 5)
      %41 = ret_node(%38) node_offset:17:5 to :17:34
      %42 = dbg_block_end()
      %43 = restore_err_ret_index(%14, @Zir.Inst.Ref.none)
      %44 = break(%14, @Zir.Inst.Ref.void_value)
    For full context, use the command
      zig ast-check -t rep.zig

  in rep.zig: rep.zig:IOR__anon_1022
    > %14 = block({%15..%44}) node_offset:10:30 to :10:31

/home/tom/play/zig/zig-master/src/value.zig:1386:33: 0xf062af in writeToPackedMemory (zig)
/home/tom/play/zig/zig-master/src/value.zig:1428:93: 0xf05e75 in writeToPackedMemory (zig)
/home/tom/play/zig/zig-master/src/value.zig:1334:61: 0x1600595 in writeToMemory (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:27307:35: 0x1776aa2 in bitCastVal (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:27283:47: 0x127dbd0 in bitCast (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:9554:24: 0x11816dd in zirBitcast (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:905:65: 0xeb6009 in analyzeBodyInner (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:5312:34: 0x16f2689 in resolveBlockBody (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:5295:85: 0x124c8b2 in zirBlock (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:1448:69: 0xec75ad in analyzeBodyInner (zig)
/home/tom/play/zig/zig-master/src/Sema.zig:793:30: 0x1130e58 in analyzeBody (zig)
/home/tom/play/zig/zig-master/src/Module.zig:5511:43: 0xe9858a in analyzeFnBody (zig)
/home/tom/play/zig/zig-master/src/Module.zig:4204:40: 0xc55521 in ensureFuncBodyAnalyzed (zig)
/home/tom/play/zig/zig-master/src/Compilation.zig:3212:42: 0xc53125 in processOneJob (zig)
/home/tom/play/zig/zig-master/src/Compilation.zig:3150:30: 0xaa95c7 in performAllTheWork (zig)
/home/tom/play/zig/zig-master/src/Compilation.zig:2400:31: 0xaa426c in update (zig)
/home/tom/play/zig/zig-master/src/main.zig:3525:20: 0xacc9fd in updateModule (zig)
/home/tom/play/zig/zig-master/src/main.zig:3188:17: 0x9b0890 in buildOutputType (zig)
/home/tom/play/zig/zig-master/src/main.zig:269:31: 0x98a1b4 in mainArgs (zig)
/home/tom/play/zig/zig-master/src/main.zig:207:20: 0x989665 in main (zig)
/home/tom/play/zig/zig-master/lib/std/start.zig:616:37: 0x98bd47 in main (zig)
???:?:?: 0x7f6eda4617dc in ??? (???)
fish: Job 1, '~/play/zig/zig-master/stage3/bi…' terminated by signal SIGABRT (Abort)

Expected Behavior

Compiles successfully

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behavior

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions