From 4c33003f862898ada0ced4b67725863c58f10043 Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 10 Mar 2022 02:20:21 +0800 Subject: [PATCH] checker: check error for infix compare optional (#13701) --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/infix_compare_optional_err.out | 6 ++++++ vlib/v/checker/tests/infix_compare_optional_err.vv | 7 +++++++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/checker/tests/infix_compare_optional_err.out create mode 100644 vlib/v/checker/tests/infix_compare_optional_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 87cafc7fab..a279ba47d1 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -842,6 +842,9 @@ pub fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { } } } + } else if left_type.has_flag(.optional) && right_type.has_flag(.optional) { + c.error('unwrapped optional cannot be compared in an infix expression', + left_right_pos) } } .left_shift { diff --git a/vlib/v/checker/tests/infix_compare_optional_err.out b/vlib/v/checker/tests/infix_compare_optional_err.out new file mode 100644 index 0000000000..f163b59c5e --- /dev/null +++ b/vlib/v/checker/tests/infix_compare_optional_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/infix_compare_optional_err.vv:6:5: error: unwrapped optional cannot be compared in an infix expression + 4 | + 5 | fn main(){ + 6 | if foo() > foo() {} + | ~~~~~~~~~~~~~ + 7 | } diff --git a/vlib/v/checker/tests/infix_compare_optional_err.vv b/vlib/v/checker/tests/infix_compare_optional_err.vv new file mode 100644 index 0000000000..6d75f31767 --- /dev/null +++ b/vlib/v/checker/tests/infix_compare_optional_err.vv @@ -0,0 +1,7 @@ +fn foo() ?int{ + return 0 +} + +fn main(){ + if foo() > foo() {} +}