Cannot write to an array within a struct from a function
The following code compiles fine with valac 0.56.13:
public struct Header {
public uint8 magic[1];
}
const uint8[] data = {'A'};
void read_magic(uint8[] buf) {
buf[0] = 'A';
}
static int main(string[] args) {
Header header = Header();
read_magic(header.magic);
assert_cmpmem(header.magic, data);
return 0;
}
but fails on assertion, because header.magic
contains 0 byte.
Yielded C code copies the original struct to a temporary variable, but never assigns it back:
static gint
_vala_main (gchar** args,
gint args_length1)
{
Header header = {0};
Header _tmp0_;
Header _tmp1_;
gint result;
#line 12 "../main.vala"
memset (&header, 0, sizeof (Header));
#line 13 "../main.vala"
_tmp0_ = header;
#line 13 "../main.vala"
read_magic (_tmp0_.magic, (gint) 1);
#line 14 "../main.vala"
_tmp1_ = header;
#line 14 "../main.vala"
g_assert_cmpmem (_tmp1_.magic, (gint) 1, data, (gint) G_N_ELEMENTS (data));
#line 15 "../main.vala"
result = 0;
#line 15 "../main.vala"
return result;
#line 109 "main.c"
}