diff options
author | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-23 21:17:45 +0000 |
---|---|---|
committer | ian <ian@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-11-23 21:17:45 +0000 |
commit | f76989fd5952e76492eba1999561c8714cca582c (patch) | |
tree | d37869769756562cc2596cd4783de2c387baf6b9 /libgo/runtime | |
parent | daebf4f300b06a230cdb7cffa863482f8f0e820c (diff) | |
download | gcc-f76989fd5952e76492eba1999561c8714cca582c.tar.gz |
PR go/68496
reflect: Allocate space for FFI functions returning a zero-sized type.
The libffi library does not understand zero-sized types. We represent
them as a struct with a single field of type void. If such a type is
returned from a function, libffi will copy 1 byte of data. Allocate
space for that byte, although we won't use it.
Fixes https://gcc.gnu.org/PR68496.
Reviewed-on: https://go-review.googlesource.com/17175
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230776 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo/runtime')
-rw-r--r-- | libgo/runtime/go-reflect-call.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libgo/runtime/go-reflect-call.c b/libgo/runtime/go-reflect-call.c index 29e814a793f..2a14d6c6add 100644 --- a/libgo/runtime/go-reflect-call.c +++ b/libgo/runtime/go-reflect-call.c @@ -81,6 +81,12 @@ go_results_size (const struct __go_func_type *func) off = (off + maxalign - 1) & ~ (maxalign - 1); + // The libffi library doesn't understand a struct with no fields. + // We generate a struct with a single field of type void. When used + // as a return value, libffi will think that requires a byte. + if (off == 0) + off = 1; + return off; } |