Sema: improve behavior of comptime_int backed enums
This commit is contained in:
@@ -1175,3 +1175,10 @@ test "Non-exhaustive enum with nonstandard int size behaves correctly" {
|
||||
const E = enum(u15) { _ };
|
||||
try expect(@sizeOf(E) == @sizeOf(u15));
|
||||
}
|
||||
|
||||
test "Non-exhaustive enum backed by comptime_int" {
|
||||
const E = enum(comptime_int) { a, b, c, _ };
|
||||
comptime var e: E = .a;
|
||||
e = @intToEnum(E, 378089457309184723749);
|
||||
try expect(@enumToInt(e) == 378089457309184723749);
|
||||
}
|
||||
|
||||
@@ -690,7 +690,7 @@ test "union with only 1 field casted to its enum type which has enum value speci
|
||||
|
||||
var e = Expr{ .Literal = Literal{ .Bool = true } };
|
||||
comptime try expect(Tag(ExprTag) == comptime_int);
|
||||
var t = @as(ExprTag, e);
|
||||
comptime var t = @as(ExprTag, e);
|
||||
try expect(t == Expr.Literal);
|
||||
try expect(@enumToInt(t) == 33);
|
||||
comptime try expect(@enumToInt(t) == 33);
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
pub export fn entry() void {
|
||||
const E = enum(comptime_int) { a, b, c, _ };
|
||||
var e: E = .a;
|
||||
_ = e;
|
||||
}
|
||||
|
||||
// error
|
||||
// backend=stage2
|
||||
// target=native
|
||||
//
|
||||
// :3:12: error: variable of type 'tmp.entry.E' must be const or comptime
|
||||
Reference in New Issue
Block a user