checker: reject void type condition (#8737)
parent
3d29f819cf
commit
e4f15605c0
|
@ -213,7 +213,7 @@ fn C.RemoveDirectory() int
|
||||||
fn C.GetStdHandle(u32) voidptr
|
fn C.GetStdHandle(u32) voidptr
|
||||||
|
|
||||||
// fn C.SetConsoleMode()
|
// fn C.SetConsoleMode()
|
||||||
fn C.SetConsoleMode(voidptr, u32)
|
fn C.SetConsoleMode(voidptr, u32) int
|
||||||
|
|
||||||
// fn C.GetConsoleMode() int
|
// fn C.GetConsoleMode() int
|
||||||
fn C.GetConsoleMode(voidptr, &u32) int
|
fn C.GetConsoleMode(voidptr, &u32) int
|
||||||
|
|
|
@ -4755,10 +4755,7 @@ pub fn (mut c Checker) if_expr(mut node ast.IfExpr) table.Type {
|
||||||
// check condition type is boolean
|
// check condition type is boolean
|
||||||
c.expected_type = table.bool_type
|
c.expected_type = table.bool_type
|
||||||
cond_typ := c.expr(branch.cond)
|
cond_typ := c.expr(branch.cond)
|
||||||
if cond_typ.idx() !in [table.bool_type_idx, table.void_type_idx]
|
if cond_typ.idx() != table.bool_type_idx && !c.pref.translated {
|
||||||
&& !c.pref.translated {
|
|
||||||
// void types are skipped, because they mean the var was initialized incorrectly
|
|
||||||
// (via missing function etc)
|
|
||||||
typ_sym := c.table.get_type_symbol(cond_typ)
|
typ_sym := c.table.get_type_symbol(cond_typ)
|
||||||
c.error('non-bool type `$typ_sym.name` used as if condition', branch.pos)
|
c.error('non-bool type `$typ_sym.name` used as if condition', branch.pos)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
vlib/v/checker/tests/if_non_bool_cond.vv:2:2: error: non-bool type `string` used as if condition
|
||||||
|
1 | fn main() {
|
||||||
|
2 | if '10' {
|
||||||
|
| ~~~~~~~
|
||||||
|
3 | println('10')
|
||||||
|
4 | }
|
||||||
|
vlib/v/checker/tests/if_non_bool_cond.vv:6:2: error: non-bool type `int literal` used as if condition
|
||||||
|
4 | }
|
||||||
|
5 |
|
||||||
|
6 | if 5 {
|
||||||
|
| ~~~~
|
||||||
|
7 | println(5)
|
||||||
|
8 | }
|
||||||
|
vlib/v/checker/tests/if_non_bool_cond.vv:10:2: error: non-bool type `void` used as if condition
|
||||||
|
8 | }
|
||||||
|
9 |
|
||||||
|
10 | if println('v') {
|
||||||
|
| ~~~~~~~~~~~~~~~
|
||||||
|
11 | println('println')
|
||||||
|
12 | }
|
|
@ -0,0 +1,13 @@
|
||||||
|
fn main() {
|
||||||
|
if '10' {
|
||||||
|
println('10')
|
||||||
|
}
|
||||||
|
|
||||||
|
if 5 {
|
||||||
|
println(5)
|
||||||
|
}
|
||||||
|
|
||||||
|
if println('v') {
|
||||||
|
println('println')
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue