mirror of
https://github.com/vlang/v.git
synced 2025-09-15 23:42:28 +03:00
checker: fix v -W vlib/v/tests/enum_bitfield_64bit_test.v
too
This commit is contained in:
parent
eb73a53551
commit
416b37bcb3
1 changed files with 8 additions and 3 deletions
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue