Skip to content

std.enums.EnumArray.initDefault and std.enums.EnumMap.initFullWithDefault fail with non-exhaustive enums #22104

@DanikVitek

Description

@DanikVitek

Zig Version

0.13.0

Steps to Reproduce and Observed Behavior

  1. Declare a non-exhaustive sparse enum
  2. Try initializing the EnumArray via init or initDefault / EnumMap via initFullWith or initFullWithDefault
  3. -> compilation error similar to "no field with value '@enumFromInt(1)' in enum 'main.E'"

EnumArray code example:

const std = @import("std");

pub fn main() !void {
    const E = enum(u3) {
        A = 0,
        B = 1, // 2,
        C = 2, // 4,
        _,
    };

    const EA = std.EnumArray(E, []const u8).initDefault("default", .{
        .A = "A",
        .B = "B",
        .C = "C",
    });

    std.debug.print("{s}\n", .{EA.get(E.A)});
}

Error message:

C:\Program Files\zigup\zig\0.13.0\files\lib\std\enums.zig:1094:29: error: no field with value '@enumFromInt(3)' in enum 'main.E'
                const tag = @tagName(key);
                            ^~~~~~~~~~~~~
src\main.zig:4:15: note: declared here
    const E = enum(u3) {
              ^~~~
referenced by:
    main: src\main.zig:11:56
    callMain: C:\Program Files\zigup\zig\0.13.0\files\lib\std\start.zig:524:32

EnumMap code example:

const std = @import("std");

pub fn main() !void {
    const E = enum(u3) {
        A = 0,
        B = 1,
        C = 2,
        _,
    };

    const EM = std.EnumMap(E, []const u8).initFullWithDefault("default", .{
        .A = "A",
        .B = "B",
        .C = "C",
    });

    std.debug.print("{?s}\n", .{EM.get(E.A)});
}

Error message:

C:\Program Files\zigup\zig\0.13.0\files\lib\std\enums.zig:507:29: error: no field with value '@enumFromInt(3)' in enum 'main.E'
                const tag = @tagName(key);
                            ^~~~~~~~~~~~~
src\main.zig:4:15: note: declared here
    const E = enum(u3) {
              ^~~~
referenced by:
    main: src\main.zig:11:62
    callMain: C:\Program Files\zigup\zig\0.13.0\files\lib\std\start.zig:524:32

Expected Behavior

Successful compilation with valid behavior

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugObserved behavior contradicts documented or intended behavior

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions