-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavior
Description
Zig Version
0.12.0-dev.1828+225fe6ddb
Steps to Reproduce and Observed Behavior
- Code
const std = @import("std");
const LogLevel = enum {
verbose,
default,
};
pub fn main() void {
const argv = std.os.argv;
const last = argv[argv.len - 1];
std.debug.print(" Last arg: {s}\n", .{last});
var log_level: LogLevel = .default;
if (last[0] == '1') {
log_level = .verbose;
}
switch (log_level) {
inline else => |level| {
std.debug.print(" before closure: {s}\n", .{@tagName(level)});
const Closure = struct {
pub fn run() void {
std.debug.print(" within closure: {s}\n", .{@tagName(level)});
}
};
Closure.run();
},
}
}- Run:
> zig run repro.zig -- 0
Last arg: 0
before closure: default
within closure: default
> zig run repro.zig -- 1
Last arg: 1
before closure: verbose
within closure: defaultExpected Behavior
It should output the following:
> zig run repro.zig -- 0
Last arg: 0
before closure: default
within closure: default
> zig run repro.zig -- 1
Last arg: 1
before closure: verbose
within closure: verboseIt should not choose the last value from the inline else for each invocation. It also shouldn't be a compiler error since log_level is unambiguously comptime-known due to the inline else.
nektro
Metadata
Metadata
Assignees
Labels
bugObserved behavior contradicts documented or intended behaviorObserved behavior contradicts documented or intended behavior