From 8c5aa42c798cac76cab67f85521c68e9dbff70b0 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Fri, 8 Jan 2021 20:46:03 -0800 Subject: [PATCH] [dev.typeparams] cmd/compile: calculate variable sizes in walk Walk already explicitly calculates the size of all expression types, to make sure they're known before SSA generation (which is concurrent, and thus not safe to modify shared state like types). Might as well compute all local variable sizes too, to be consistent. Reduces the burden of the frontend to make sure it's calculated the size of types that only the backend cares about. Passes toolstash -cmp. Change-Id: I68bcca67b4640bfc875467e4ed4d47104b1932f4 Reviewed-on: https://go-review.googlesource.com/c/go/+/282912 Trust: Matthew Dempsky Trust: Robert Griesemer Run-TryBot: Matthew Dempsky TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/cmd/compile/internal/walk/walk.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/cmd/compile/internal/walk/walk.go b/src/cmd/compile/internal/walk/walk.go index 928b6737528..4a89d2201d8 100644 --- a/src/cmd/compile/internal/walk/walk.go +++ b/src/cmd/compile/internal/walk/walk.go @@ -57,6 +57,11 @@ func Walk(fn *ir.Func) { if base.Flag.Cfg.Instrumenting { instrument(fn) } + + // Eagerly compute sizes of all variables for SSA. + for _, n := range fn.Dcl { + types.CalcSize(n.Type()) + } } func paramoutheap(fn *ir.Func) bool {