]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: fix gcSizes.Sizeof for a zero-sized struct
authorDan Scales <danscales@google.com>
Tue, 6 Apr 2021 03:03:02 +0000 (20:03 -0700)
committerDan Scales <danscales@google.com>
Tue, 6 Apr 2021 13:01:37 +0000 (13:01 +0000)
(*gcSizes).Sizeof was requiring the last field of a zero-sized struct to
be at least one byte. But that rule (fix for #9401, see logic in
calcStructOffset) only applies to a struct that has some non-zero sized
fields. Fix (*gcSizes).Sizeof to have the logic like calcStructOffset.

Fixes running the gotests with -G=3 enabled.

Fixes #45390

Change-Id: I011f40e3de3a327392bbbb791b9422be75336313
Reviewed-on: https://go-review.googlesource.com/c/go/+/307549
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Dan Scales <danscales@google.com>

src/cmd/compile/internal/noder/sizes.go

index 7cda6da9a60e1bf8da5aa1f545491e2b68b0d437..23f206267547f4fd467fc91a93f0ab3998c2db5c 100644 (file)
@@ -115,10 +115,10 @@ func (s *gcSizes) Sizeof(T types2.Type) int64 {
                }
                offsets := s.Offsetsof(fields)
 
-               // gc: The last field of a struct is not allowed to
+               // gc: The last field of a non-zero-sized struct is not allowed to
                // have size 0.
                last := s.Sizeof(fields[n-1].Type())
-               if last == 0 {
+               if last == 0 && offsets[n-1] > 0 {
                        last = 1
                }