diff --git a/vlib/sync/channels.c.v b/vlib/sync/channels.c.v index c70065b907..4bb9f0f1b1 100644 --- a/vlib/sync/channels.c.v +++ b/vlib/sync/channels.c.v @@ -59,7 +59,7 @@ pub: } pub fn new_channel[T](n u32) &Channel { - st := sizeof(T) + st := if sizeof(T) > 0 { sizeof(T) } else { 1 } if isreftype(T) { return new_channel_st(n, st) } else { diff --git a/vlib/sync/empty_struct_chan_init_test.v b/vlib/sync/empty_struct_chan_init_test.v new file mode 100644 index 0000000000..563a3375e3 --- /dev/null +++ b/vlib/sync/empty_struct_chan_init_test.v @@ -0,0 +1,8 @@ +struct User { +} + +fn test_empty_struct_chan_init() { + user_ch := chan User{cap: 10} + println(user_ch) + assert true +} diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 46e4e4a593..dd959643fd 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -3095,7 +3095,9 @@ fn (mut g Gen) expr(node_ ast.Expr) { } g.write(', sizeof(') g.write(elem_typ_str) - g.write('))') + g.write(')>0 ? sizeof(') + g.write(elem_typ_str) + g.write(') : 1)') } ast.CharLiteral { g.char_literal(node)