]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: add types.RecalcSize
authorMatthew Dempsky <mdempsky@google.com>
Thu, 26 Aug 2021 22:54:44 +0000 (15:54 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 27 Aug 2021 00:36:54 +0000 (00:36 +0000)
This is the only case where Align is assigned outside of package
types. Rather than adding a SetAlign method, adding a RecalcSize
function is a bit more descriptive.

Change-Id: I1b3c01ebd0e41183665baa63c926592865bbbd0b
Reviewed-on: https://go-review.googlesource.com/c/go/+/345479
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/noder/func.go
src/cmd/compile/internal/types/size.go

index 702138157c53b8186760e616c9541aa0e90670d6..6077b348a5c73e6bc123ebb2091d20212ada72df 100644 (file)
@@ -37,8 +37,7 @@ func (g *irgen) funcBody(fn *ir.Func, recv *syntax.Field, sig *syntax.FuncType,
        // calculated its size, including parameter offsets. Now that we've
        // created the parameter Names, force a recalculation to ensure
        // their offsets are correct.
-       typ.Align = 0
-       types.CalcSize(typ)
+       types.RecalcSize(typ)
 
        if block != nil {
                typecheck.DeclContext = ir.PAUTO
index 34db0a0b0cf14d04eaef67a5197f6ab4f81e759c..2546f0e2d1171380d3e6422d0a505249d4f33a79 100644 (file)
@@ -562,6 +562,14 @@ func CalcStructSize(s *Type) {
        s.Width = calcStructOffset(s, s, 0, 1) // sets align
 }
 
+// RecalcSize is like CalcSize, but recalculates t's size even if it
+// has already been calculated before. It does not recalculate other
+// types.
+func RecalcSize(t *Type) {
+       t.Align = 0
+       CalcSize(t)
+}
+
 // when a type's width should be known, we call CheckSize
 // to compute it.  during a declaration like
 //