From 5cd8a344954cc29be9bce6d67b3f4293ed72aa9f Mon Sep 17 00:00:00 2001 From: Dan Scales Date: Mon, 5 Apr 2021 20:03:02 -0700 Subject: [PATCH] cmd/compile: fix gcSizes.Sizeof for a zero-sized struct (*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 Trust: Dan Scales --- src/cmd/compile/internal/noder/sizes.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/compile/internal/noder/sizes.go b/src/cmd/compile/internal/noder/sizes.go index 7cda6da9a6..23f2062675 100644 --- a/src/cmd/compile/internal/noder/sizes.go +++ b/src/cmd/compile/internal/noder/sizes.go @@ -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 } -- 2.50.0