]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: eagerly CalcStructSize for synthetic ABI types
authorMatthew Dempsky <mdempsky@google.com>
Thu, 26 Aug 2021 23:57:06 +0000 (16:57 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 27 Aug 2021 03:24:35 +0000 (03:24 +0000)
The next CL is going to replace Type.Width with Type.Size(), but
Type.Size() isn't safe to call concurrently. So this CL calls
CalcStructSize, which *is* allowed to be used concurrently, but then
it's the caller's responsibility to ensure it's called right after
NewStruct.

Change-Id: If9cd81650ccb3a867b4449af757375fa56227901
Reviewed-on: https://go-review.googlesource.com/c/go/+/345483
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/abi/abiutils.go

index d657ddc867bad00f44a00a3e9af54b7507b99683..24f34b826331cf7f4c682f16f14c0ac09f7c509c 100644 (file)
@@ -722,14 +722,17 @@ func setup() {
                        types.NewField(nxp, fname("len"), ui),
                        types.NewField(nxp, fname("cap"), ui),
                })
+               types.CalcStructSize(synthSlice)
                synthString = types.NewStruct(types.NoPkg, []*types.Field{
                        types.NewField(nxp, fname("data"), unsp),
                        types.NewField(nxp, fname("len"), ui),
                })
+               types.CalcStructSize(synthString)
                synthIface = types.NewStruct(types.NoPkg, []*types.Field{
                        types.NewField(nxp, fname("f1"), unsp),
                        types.NewField(nxp, fname("f2"), unsp),
                })
+               types.CalcStructSize(synthIface)
        })
 }