From 71c2b261038bc58d393b2df9b1a75cbc428bd73e Mon Sep 17 00:00:00 2001 From: Alexey Date: Sun, 10 May 2020 23:26:47 +0300 Subject: [PATCH] checker: fix checking uninitialized refs --- vlib/v/checker/checker.v | 2 +- vlib/v/checker/tests/reference_field_must_be_initialized.out | 2 +- vlib/v/checker/tests/reference_field_must_be_initialized.vv | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7bdd84b3b6..034ef53130 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -330,7 +330,7 @@ pub fn (mut c Checker) struct_init(struct_init mut ast.StructInit) table.Type { } // Check uninitialized refs for field in info.fields { - if field.name in inited_fields { + if field.has_default_expr || field.name in inited_fields { continue } if field.typ.is_ptr() { diff --git a/vlib/v/checker/tests/reference_field_must_be_initialized.out b/vlib/v/checker/tests/reference_field_must_be_initialized.out index e1a72dedeb..5811dc04d3 100644 --- a/vlib/v/checker/tests/reference_field_must_be_initialized.out +++ b/vlib/v/checker/tests/reference_field_must_be_initialized.out @@ -1,7 +1,7 @@ vlib/v/checker/tests/reference_field_must_be_initialized.v:8:7: error: reference field `Node.next` must be initialized 6 | 7 | fn main(){ - 8 | n := Node{ data: 123 } + 8 | n := Node{ data: 123 } | ~~~~~~~~~~~~~~~~~ 9 | eprintln('n.data: $n.data') 10 | } diff --git a/vlib/v/checker/tests/reference_field_must_be_initialized.vv b/vlib/v/checker/tests/reference_field_must_be_initialized.vv index 1132f49bf8..a308173108 100644 --- a/vlib/v/checker/tests/reference_field_must_be_initialized.vv +++ b/vlib/v/checker/tests/reference_field_must_be_initialized.vv @@ -1,10 +1,10 @@ module main struct Node { data int - next &Node = 0 + next &Node } fn main(){ - n := Node{ data: 123 } + n := Node{ data: 123 } eprintln('n.data: $n.data') }