Skip to content

compiler assertion tripped with multiple comptime fn calls and default initialized array #4578

Closed
@andrewrk

Description

@andrewrk
const std = @import("std");

pub const CrossTarget = struct {
    dynamic_linker: DynamicLinker = DynamicLinker{},

    pub fn parse() void {
        var result: CrossTarget = .{ };
        result.getCpuArch();
    }

    pub fn getCpuArch(self: CrossTarget) void { }
};

pub const DynamicLinker = struct {
    buffer: [255]u8 = undefined,
};

comptime {
    CrossTarget.parse();
    CrossTarget.parse();
}

pub fn panic(msg: []const u8, stack_trace: ?*const std.builtin.StackTrace) noreturn {
    @breakpoint();
    unreachable;
}
[nix-shell:~/Downloads/zig/build]$ ./zig build-obj test.zig 
Assertion failed at /home/andy/Downloads/zig/src/analyze.cpp:5403 in can_mutate_comptime_var_state. This is a bug in the Zig compiler.
/home/andy/Downloads/zig/src-self-hosted/stage2.zig:36:5: 0xff003c in stage2_panic (zigstage2)
    @panic(ptr[0..len]);
    ^
/home/andy/Downloads/zig/src/util.cpp:20:17: 0xfb2914 in zig_panic (/home/andy/Downloads/zig/src/util.cpp)
    stage2_panic("", 0);
                ^
/home/andy/Downloads/zig/src/util_base.hpp:53:18: 0xfb302f in zig_assert (/home/andy/Downloads/zig/src/analyze.cpp)
        zig_panic("Assertion failed at %s:%d in %s. This is a bug in the Zig compiler.", file, line, func);
                 ^
/home/andy/Downloads/zig/src/analyze.cpp:5403:5: 0xfc39a1 in can_mutate_comptime_var_state (/home/andy/Downloads/zig/src/analyze.cpp)
    assert(value != nullptr);
    ^
/home/andy/Downloads/zig/src/analyze.cpp:5440:58: 0xfc3a78 in can_mutate_comptime_var_state (/home/andy/Downloads/zig/src/analyze.cpp)
                        if (can_mutate_comptime_var_state(&value->data.x_array.data.s_none.elements[i]))
                                                         ^
/home/andy/Downloads/zig/src/analyze.cpp:5448:50: 0xfc3ae7 in can_mutate_comptime_var_state (/home/andy/Downloads/zig/src/analyze.cpp)
                if (can_mutate_comptime_var_state(value->data.x_struct.fields[i]))
                                                 ^
/home/andy/Downloads/zig/src/analyze.cpp:5448:50: 0xfc3ae7 in can_mutate_comptime_var_state (/home/andy/Downloads/zig/src/analyze.cpp)
                if (can_mutate_comptime_var_state(value->data.x_struct.fields[i]))
                                                 ^
/home/andy/Downloads/zig/src/analyze.cpp:5522:46: 0xfc3d0f in fn_eval_cacheable (/home/andy/Downloads/zig/src/analyze.cpp)
            if (can_mutate_comptime_var_state(var_scope->var->const_value))
                                             ^
/home/andy/Downloads/zig/src/ir.cpp:19155:43: 0xf56b5d in ir_analyze_fn_call (/home/andy/Downloads/zig/src/ir.cpp)
        bool cacheable = fn_eval_cacheable(exec_scope, return_type);
                                          ^
/home/andy/Downloads/zig/src/ir.cpp:19571:43: 0xf587a2 in ir_analyze_fn_call_src (/home/andy/Downloads/zig/src/ir.cpp)
    IrInstGen *result = ir_analyze_fn_call(ira, &call_instruction->base.base, fn_entry, fn_type, fn_ref,
                                          ^
/home/andy/Downloads/zig/src/ir.cpp:19757:42: 0xf59367 in ir_analyze_instruction_call (/home/andy/Downloads/zig/src/ir.cpp)
            return ir_analyze_fn_call_src(ira, call_instruction, fn_table_entry, fn_table_entry->type_entry,
                                         ^
/home/andy/Downloads/zig/src/ir.cpp:29159:47: 0xf7c5ba in ir_analyze_instruction_base (/home/andy/Downloads/zig/src/ir.cpp)
            return ir_analyze_instruction_call(ira, (IrInstSrcCall *)instruction);
                                              ^
/home/andy/Downloads/zig/src/ir.cpp:29473:65: 0xf7d54c in ir_analyze (/home/andy/Downloads/zig/src/ir.cpp)
        IrInstGen *new_instruction = ir_analyze_instruction_base(ira, old_instruction);
                                                                ^
/home/andy/Downloads/zig/src/ir.cpp:13003:38: 0xf40fe2 in ir_eval_const_value (/home/andy/Downloads/zig/src/ir.cpp)
    ZigType *result_type = ir_analyze(codegen, ir_executable, analyzed_executable,
                                     ^
/home/andy/Downloads/zig/src/ir.cpp:19168:43: 0xf56c7a in ir_analyze_fn_call (/home/andy/Downloads/zig/src/ir.cpp)
            if ((err = ir_eval_const_value(ira->codegen, exec_scope, body_node, result_ptr,
                                          ^
/home/andy/Downloads/zig/src/ir.cpp:19571:43: 0xf587a2 in ir_analyze_fn_call_src (/home/andy/Downloads/zig/src/ir.cpp)
    IrInstGen *result = ir_analyze_fn_call(ira, &call_instruction->base.base, fn_entry, fn_type, fn_ref,
                                          ^
/home/andy/Downloads/zig/src/ir.cpp:19749:42: 0xf592ac in ir_analyze_instruction_call (/home/andy/Downloads/zig/src/ir.cpp)
            return ir_analyze_fn_call_src(ira, call_instruction, fn_table_entry, fn_type,
                                         ^
/home/andy/Downloads/zig/src/ir.cpp:29159:47: 0xf7c5ba in ir_analyze_instruction_base (/home/andy/Downloads/zig/src/ir.cpp)
            return ir_analyze_instruction_call(ira, (IrInstSrcCall *)instruction);
                                              ^
/home/andy/Downloads/zig/src/ir.cpp:29473:65: 0xf7d54c in ir_analyze (/home/andy/Downloads/zig/src/ir.cpp)
        IrInstGen *new_instruction = ir_analyze_instruction_base(ira, old_instruction);
                                                                ^
/home/andy/Downloads/zig/src/ir.cpp:13003:38: 0xf40fe2 in ir_eval_const_value (/home/andy/Downloads/zig/src/ir.cpp)
    ZigType *result_type = ir_analyze(codegen, ir_executable, analyzed_executable,
                                     ^
/home/andy/Downloads/zig/src/analyze.cpp:1119:35: 0xfb6bfd in analyze_const_value (/home/andy/Downloads/zig/src/analyze.cpp)
    if ((err = ir_eval_const_value(g, scope, node, result_ptr,
                                  ^
/home/andy/Downloads/zig/src/analyze.cpp:3588:24: 0xfbe370 in resolve_decl_comptime (/home/andy/Downloads/zig/src/analyze.cpp)
    analyze_const_value(g, tld_comptime->base.parent_scope, expr_node, g->builtin_types.entry_void,
                       ^
/home/andy/Downloads/zig/src/analyze.cpp:4182:34: 0xfbff13 in resolve_top_level_decl (/home/andy/Downloads/zig/src/analyze.cpp)
            resolve_decl_comptime(g, tld_comptime);
                                 ^
/home/andy/Downloads/zig/src/analyze.cpp:4981:35: 0xfc26bc in semantic_analyze (/home/andy/Downloads/zig/src/analyze.cpp)
            resolve_top_level_decl(g, tld, source_node, false);
                                  ^
/home/andy/Downloads/zig/src/codegen.cpp:9497:25: 0xeff751 in gen_root_source (/home/andy/Downloads/zig/src/codegen.cpp)
        semantic_analyze(g);
                        ^
/home/andy/Downloads/zig/src/codegen.cpp:10506:28: 0xf031ee in codegen_build_and_link (/home/andy/Downloads/zig/src/codegen.cpp)
            gen_root_source(g);
                           ^
/home/andy/Downloads/zig/src/main.cpp:1301:39: 0xed78e4 in main0 (/home/andy/Downloads/zig/src/main.cpp)
                codegen_build_and_link(g);
                                      ^
/home/andy/Downloads/zig/src/main.cpp:1448:24: 0xed8158 in main (/home/andy/Downloads/zig/src/main.cpp)
    auto result = main0(argc, argv);
                       ^

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behaviorstage1The process of building from source via WebAssembly and the C backend.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions