checker: fix v -W vlib/v/tests/enum_bitfield_64bit_test.v too

This commit is contained in:
Delyan Angelov 2024-05-23 17:40:02 +03:00
parent eb73a53551
commit 416b37bcb3
No known key found for this signature in database
GPG key ID: 66886C0F12D595ED

View file

@ -3416,9 +3416,14 @@ fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type {
if enum_decl := c.table.enum_decls[to_sym.name] {
mut in_range := false
if enum_decl.is_flag {
// if a flag enum has 4 variants, the maximum possible value would have all 4 flags set (0b1111)
max_val := (u64(1) << enum_decl.fields.len) - 1
in_range = node_val >= 0 && u64(node_val) <= max_val
if enum_decl.fields.len == 64 {
// for 64 fields, just use max_u64 and avoid UB:
in_range = node_val >= 0 && u64(node_val) <= max_u64
} else {
// if a flag enum has 4 variants, the maximum possible value would have all 4 flags set (0b1111)
max_val := (u64(1) << enum_decl.fields.len) - 1
in_range = node_val >= 0 && u64(node_val) <= max_val
}
} else {
mut enum_val := i64(0)