From 8c249366c4859de7cf21d2a1f114449247714803 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Sat, 1 Jun 2024 16:19:19 +0530 Subject: [PATCH] checker: disallow sum type with `Result` variants (#21620) --- vlib/v/checker/checker.v | 2 ++ vlib/v/checker/tests/sum_type_result_variant_err.out | 5 +++++ vlib/v/checker/tests/sum_type_result_variant_err.vv | 4 ++++ 3 files changed, 11 insertions(+) create mode 100644 vlib/v/checker/tests/sum_type_result_variant_err.out create mode 100644 vlib/v/checker/tests/sum_type_result_variant_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7ca1df6de..2b06d5118 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -706,6 +706,8 @@ and use a reference to the sum type instead: `var := &${node.name}(${variant_nam c.error('sum type `${node.name}` cannot be defined recursively', variant.pos) } } + } else if variant.typ.has_flag(.result) { + c.error('sum type cannot hold a Result type', variant.pos) } c.check_any_type(variant.typ, sym, variant.pos) diff --git a/vlib/v/checker/tests/sum_type_result_variant_err.out b/vlib/v/checker/tests/sum_type_result_variant_err.out new file mode 100644 index 000000000..fc1e39bdb --- /dev/null +++ b/vlib/v/checker/tests/sum_type_result_variant_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/sum_type_result_variant_err.vv:1:18: error: sum type cannot hold a Result type + 1 | type ResultInt = !i32 | !i64 + | ~~~~ + 2 | + 3 | fn main() { diff --git a/vlib/v/checker/tests/sum_type_result_variant_err.vv b/vlib/v/checker/tests/sum_type_result_variant_err.vv new file mode 100644 index 000000000..3da973d58 --- /dev/null +++ b/vlib/v/checker/tests/sum_type_result_variant_err.vv @@ -0,0 +1,4 @@ +type ResultInt = !i32 | !i64 + +fn main() { +} -- 2.39.5