1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

checker: Revert part of small_unsigned == signed (#13967) (#14075)

`gcc -W` doesn't error for e.g. u16 == i32, only for u32 == i16.
Any u16 value can fit in an i32.
This commit is contained in:
Nick Treleaven 2022-04-18 19:30:09 +01:00 committed by GitHub
parent 7ef64bde50
commit 4400efeb9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 6 additions and 33 deletions

View File

@ -161,7 +161,7 @@ fn test_bf_from_str() {
output := bitfield.from_str(input) output := bitfield.from_str(input)
mut result := 1 mut result := 1
for i in 0 .. len { for i in 0 .. len {
if input[i] != u8(output.get_bit(i)) + 48 { if input[i] != output.get_bit(i) + 48 {
result = 0 result = 0
} }
} }

View File

@ -288,8 +288,8 @@ fn (mut ctx Context) parse_events() {
if !C.GetConsoleScreenBufferInfo(ctx.stdout_handle, &sb) { if !C.GetConsoleScreenBufferInfo(ctx.stdout_handle, &sb) {
panic('could not get screenbuffer info') panic('could not get screenbuffer info')
} }
w := int(sb.srWindow.Right - sb.srWindow.Left + 1) w := sb.srWindow.Right - sb.srWindow.Left + 1
h := int(sb.srWindow.Bottom - sb.srWindow.Top + 1) h := sb.srWindow.Bottom - sb.srWindow.Top + 1
utf8 := '($ctx.window_width, $ctx.window_height) -> ($w, $h)' utf8 := '($ctx.window_width, $ctx.window_height) -> ($w, $h)'
if w != ctx.window_width || h != ctx.window_height { if w != ctx.window_width || h != ctx.window_height {
ctx.window_width, ctx.window_height = w, h ctx.window_width, ctx.window_height = w, h

View File

@ -639,15 +639,6 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type {
rt := c.table.sym(right_type).name rt := c.table.sym(right_type).name
c.error('negative value cannot be compared with `$rt`', node.left.pos) c.error('negative value cannot be compared with `$rt`', node.left.pos)
} }
} else if is_left_type_signed != is_right_type_signed
&& left_type.flip_signedness() != right_type {
// prevent e.g. `u16(-1) == int(-1)` which is false in C
if (is_right_type_signed && left_type in ast.int_promoted_type_idxs)
|| (is_left_type_signed && right_type in ast.int_promoted_type_idxs) {
lt := c.table.sym(left_type).name
rt := c.table.sym(right_type).name
c.error('`$lt` cannot be compared with `$rt`', node.pos)
}
} }
} }
} }

View File

@ -17,24 +17,10 @@ vlib/v/checker/tests/compare_unsigned_signed.vv:10:16: error: `u8` cannot be com
10 | _ = u8(-1) == -1 // false! 10 | _ = u8(-1) == -1 // false!
| ~~ | ~~
11 | _ = -1 == u16(-1) // false! 11 | _ = -1 == u16(-1) // false!
12 | 12 | }
vlib/v/checker/tests/compare_unsigned_signed.vv:11:6: error: negative value cannot be compared with `u16` vlib/v/checker/tests/compare_unsigned_signed.vv:11:6: error: negative value cannot be compared with `u16`
9 | // unsigned == literal 9 | // unsigned == literal
10 | _ = u8(-1) == -1 // false! 10 | _ = u8(-1) == -1 // false!
11 | _ = -1 == u16(-1) // false! 11 | _ = -1 == u16(-1) // false!
| ~~ | ~~
12 | 12 | }
13 | // unsigned == signed
vlib/v/checker/tests/compare_unsigned_signed.vv:14:14: error: `u16` cannot be compared with `int`
12 |
13 | // unsigned == signed
14 | _ = u16(-1) == int(-1)
| ~~
15 | _ = int(-1) != u8(-1)
16 | }
vlib/v/checker/tests/compare_unsigned_signed.vv:15:14: error: `int` cannot be compared with `u8`
13 | // unsigned == signed
14 | _ = u16(-1) == int(-1)
15 | _ = int(-1) != u8(-1)
| ~~
16 | }

View File

@ -9,8 +9,4 @@ fn main() {
// unsigned == literal // unsigned == literal
_ = u8(-1) == -1 // false! _ = u8(-1) == -1 // false!
_ = -1 == u16(-1) // false! _ = -1 == u16(-1) // false!
// unsigned == signed
_ = u16(-1) == int(-1)
_ = int(-1) != u8(-1)
} }

View File

@ -778,7 +778,7 @@ pub fn (mut bmp BitMap) draw_glyph(index u16) (int, int) {
} }
} }
if count == int(glyph.contour_ends[c]) { if count == glyph.contour_ends[c] {
// dprintln("count == glyph.contour_ends[count]") // dprintln("count == glyph.contour_ends[count]")
if s == 2 { // final point was off-curve. connect to start if s == 2 { // final point was off-curve. connect to start