re PR go/68496 ([libgo] reflect test fails on Linux x86-64)

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

From-SVN: r230776
This commit is contained in:
Ian Lance Taylor 2015-11-23 21:17:45 +00:00
parent cbd03aee24
commit 8c61286797
2 changed files with 7 additions and 1 deletions

View File

@ -1,4 +1,4 @@
97ec885c715b3922b0866c081554899b8d50933a 0d979f0b860cfd879754150e0ae5e1018b94d7c4
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.

View File

@ -81,6 +81,12 @@ go_results_size (const struct __go_func_type *func)
off = (off + maxalign - 1) & ~ (maxalign - 1); 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; return off;
} }