]> Cypherpunks repositories - gostls13.git/commit
reflect: remove short-circuits for zero-sized types in ABI algorithm
authorMichael Anthony Knyszek <mknyszek@google.com>
Fri, 2 Apr 2021 18:58:56 +0000 (18:58 +0000)
committerMichael Knyszek <mknyszek@google.com>
Fri, 2 Apr 2021 19:27:06 +0000 (19:27 +0000)
commit34b87b4a1ab7562858baf74f2320ab881214229e
tree2348dec16f2caec8ffb887eb8eab812219366692
parent254948a50e12aac1059816a1575ccef1b3892723
reflect: remove short-circuits for zero-sized types in ABI algorithm

This change removes two short-circuits for zero-sized types (zero-sized
structs and zero-sized struct fields) in the recursive cases of the ABI
algorithm, because this does not match the spec's algorithm, nor the
compiler's algorithm.

The failing case here is a struct with a field that is an array of
non-zero length but whose element type is zero-sized. This struct must
be stack-assigned because of the array, according to the algorithm.
The reflect package was register-assigning it.

Because there were two short-circuits, this can also appear if a struct
has a field that is a zero-sized struct but contains such an array,
also.

This change adds regression tests for both of these cases.

For #44816.
For #40724.

Change-Id: I956804170962448197a1c9853826e3436fc8b1ea
Reviewed-on: https://go-review.googlesource.com/c/go/+/306929
Trust: Michael Knyszek <mknyszek@google.com>
Run-TryBot: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
src/reflect/abi.go
src/reflect/abi_test.go