From fde6d641bd677e755b40b93e92ee55c52eb60850 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 11 Mar 2026 12:37:21 +0300 Subject: [PATCH] cgen: initializing struct in channel bug (fixes #10342) --- vlib/v/gen/c/cgen.v | 2 +- vlib/v/tests/concurrency/channels_test.v | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 426ea3a9a..49f91ec47 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -1938,7 +1938,7 @@ pub fn (mut g Gen) write_typedef_types() { push_arg := el_stype + if is_fixed_arr { '*' } else { '' } g.channel_definitions.writeln(' static inline ${el_stype} __${sym.cname}_popval(${sym.cname} ch) { - ${el_stype} val; + ${el_stype} val = {0}; sync__Channel_try_pop_priv(ch, ${val_arg_pop}, false); return val; }') diff --git a/vlib/v/tests/concurrency/channels_test.v b/vlib/v/tests/concurrency/channels_test.v index 86c3be4f3..af7c1e0b7 100644 --- a/vlib/v/tests/concurrency/channels_test.v +++ b/vlib/v/tests/concurrency/channels_test.v @@ -1,3 +1,5 @@ +import time + struct St1 { val int = 5 another chan f64 @@ -72,3 +74,11 @@ fn test_channel_with_or_block() { println(ret) assert false } + +fn test_closed_channel_returns_zero_value_struct() { + ch := chan time.Time{} + ch.close() + got := <-ch + assert got == time.Time{} + assert got.str() == '0000-00-00 00:00:00' +} -- 2.39.5