diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 200af1fc62..e848fdf9fc 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -3191,6 +3191,11 @@ fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type { return to_type } + if !c.expected_type.has_flag(.generic) && to_sym.name.len == 1 + && to_sym.name.starts_with_capital() { + c.error('unknown type `${to_sym.name}`', node.pos) + } + if to_sym.language != .c { c.ensure_type_exists(to_type, node.pos) diff --git a/vlib/v/checker/tests/cast_expr_T_type_err.out b/vlib/v/checker/tests/cast_expr_T_type_err.out new file mode 100644 index 0000000000..cd035030e9 --- /dev/null +++ b/vlib/v/checker/tests/cast_expr_T_type_err.out @@ -0,0 +1,13 @@ +vlib/v/checker/tests/cast_expr_T_type_err.vv:4:9: error: unknown type `A` + 2 | + 3 | fn main() { + 4 | _ = A(0) + | ~~~~ + 5 | _ = &A(0) + 6 | } +vlib/v/checker/tests/cast_expr_T_type_err.vv:5:9: error: unknown type `A` + 3 | fn main() { + 4 | _ = A(0) + 5 | _ = &A(0) + | ~~~~~ + 6 | } diff --git a/vlib/v/checker/tests/cast_expr_T_type_err.vv b/vlib/v/checker/tests/cast_expr_T_type_err.vv new file mode 100644 index 0000000000..667e3caaaa --- /dev/null +++ b/vlib/v/checker/tests/cast_expr_T_type_err.vv @@ -0,0 +1,6 @@ +module main + +fn main() { + _ = A(0) + _ = &A(0) +} diff --git a/vlib/v/checker/tests/globals/cast_expr_T_type_err.out b/vlib/v/checker/tests/globals/cast_expr_T_type_err.out new file mode 100644 index 0000000000..1ddaafab26 --- /dev/null +++ b/vlib/v/checker/tests/globals/cast_expr_T_type_err.out @@ -0,0 +1,14 @@ +vlib/v/checker/tests/globals/cast_expr_T_type_err.vv:4:7: error: unknown type `A` + 2 | + 3 | __global ( + 4 | fo = A(0) + | ~~~~ + 5 | fo1 = &A(0) + 6 | ) +vlib/v/checker/tests/globals/cast_expr_T_type_err.vv:5:8: error: unknown type `A` + 3 | __global ( + 4 | fo = A(0) + 5 | fo1 = &A(0) + | ~~~~~ + 6 | ) + 7 | diff --git a/vlib/v/checker/tests/globals/cast_expr_T_type_err.vv b/vlib/v/checker/tests/globals/cast_expr_T_type_err.vv new file mode 100644 index 0000000000..f4fc2a371e --- /dev/null +++ b/vlib/v/checker/tests/globals/cast_expr_T_type_err.vv @@ -0,0 +1,10 @@ +module main + +__global ( + fo = A(0) + fo1 = &A(0) +) + +fn main() { + +}