[Bug go/64021] Empty struct vs libffi
ian at airs dot com
gcc-bugzilla@gcc.gnu.org
Mon Nov 24 15:40:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64021
--- Comment #7 from Ian Lance Taylor <ian at airs dot com> ---
The Go language says that "Pointers to distinct zero-size variables may or may
not be equal" (http://golang.org/ref/spec#Comparison_operators). So in the
language sense it would be OK to always convert zero-sized structs to contain a
single byte. Go programmers routinely write things like make(chan struct{},
1000) and expect the channel to not take any space--the channel will keep a
count of elements but the element storage won't take any space; however, I
think that would continue to work as expected, since the libgo code looks at
the size in the Go type descriptor, which would continue to be zero.
I think the cleanest approach would be to modify libffi. But as far as I can
always representing zero-sized structs as 1 byte in GIMPLE would work. It
would mean we could remove Gcc_backend::non_zero_size_type.
I note that a zero-sized array is converted to an empty struct in go-ffi.c. I
wonder how libffi handles that today.
More information about the Gcc-bugs
mailing list