From: Matthew Dempsky Date: Mon, 21 Aug 2023 21:08:46 +0000 (-0700) Subject: cmd/compile/internal/walk: reuse runtime.scase X-Git-Tag: go1.22rc1~1165 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fecf51717f0911e5e6c8ede773656da79c0ade9f;p=gostls13.git cmd/compile/internal/walk: reuse runtime.scase Shaves ~1.5kB off cmd/go binary. Change-Id: I8ad85aa4a24bc197b009c8e1ea9201957222152a Reviewed-on: https://go-review.googlesource.com/c/go/+/521677 Reviewed-by: Keith Randall Run-TryBot: Matthew Dempsky Auto-Submit: Matthew Dempsky TryBot-Result: Gopher Robot Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/walk/select.go b/src/cmd/compile/internal/walk/select.go index 9ca132af7a..009753c8ad 100644 --- a/src/cmd/compile/internal/walk/select.go +++ b/src/cmd/compile/internal/walk/select.go @@ -9,6 +9,7 @@ import ( "cmd/compile/internal/ir" "cmd/compile/internal/typecheck" "cmd/compile/internal/types" + "cmd/internal/src" ) func walkSelect(sel *ir.SelectStmt) { @@ -287,11 +288,15 @@ var scase *types.Type // Keep in sync with src/runtime/select.go. func scasetype() *types.Type { if scase == nil { - scase = types.NewStruct([]*types.Field{ + n := ir.NewDeclNameAt(src.NoXPos, ir.OTYPE, ir.Pkgs.Runtime.Lookup("scase")) + scase = types.NewNamed(n) + n.SetType(scase) + n.SetTypecheck(1) + + scase.SetUnderlying(types.NewStruct([]*types.Field{ types.NewField(base.Pos, typecheck.Lookup("c"), types.Types[types.TUNSAFEPTR]), types.NewField(base.Pos, typecheck.Lookup("elem"), types.Types[types.TUNSAFEPTR]), - }) - scase.SetNoalg(true) + })) } return scase } diff --git a/test/live.go b/test/live.go index 1777a51f2a..8a8f8bb71f 100644 --- a/test/live.go +++ b/test/live.go @@ -167,7 +167,7 @@ var b bool // this used to have a spurious "live at entry to f11a: ~r0" func f11a() *int { - select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: return nil case <-c: @@ -182,7 +182,7 @@ func f11b() *int { // get to the bottom of the function. // This used to have a spurious "live at call to printint: p". printint(1) // nothing live here! - select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: return nil case <-c: @@ -202,7 +202,7 @@ func f11c() *int { // Unlike previous, the cases in this select fall through, // so we can get to the println, so p is not dead. printint(1) // ERROR "live at call to printint: p$" - select { // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: case <-c: } @@ -600,7 +600,7 @@ func f38(b bool) { // we care that the println lines have no live variables // and therefore no output. if b { - select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]struct \{" + select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]runtime.scase$" case <-fc38(): printnl() case fc38() <- *fi38(1): // ERROR "live at call to fc38:( .autotmp_[0-9]+)+$" "live at call to fi38:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ string$" diff --git a/test/live_regabi.go b/test/live_regabi.go index 7ae84891e4..0b7f2eeb4e 100644 --- a/test/live_regabi.go +++ b/test/live_regabi.go @@ -164,7 +164,7 @@ var b bool // this used to have a spurious "live at entry to f11a: ~r0" func f11a() *int { - select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: return nil case <-c: @@ -179,7 +179,7 @@ func f11b() *int { // get to the bottom of the function. // This used to have a spurious "live at call to printint: p". printint(1) // nothing live here! - select { // ERROR "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: return nil case <-c: @@ -199,7 +199,7 @@ func f11c() *int { // Unlike previous, the cases in this select fall through, // so we can get to the println, so p is not dead. printint(1) // ERROR "live at call to printint: p$" - select { // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]struct" + select { // ERROR "live at call to selectgo: p$" "stack object .autotmp_[0-9]+ \[2\]runtime.scase$" case <-c: case <-c: } @@ -597,7 +597,7 @@ func f38(b bool) { // we care that the println lines have no live variables // and therefore no output. if b { - select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]struct \{" + select { // ERROR "live at call to selectgo:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ \[4\]runtime.scase$" case <-fc38(): printnl() case fc38() <- *fi38(1): // ERROR "live at call to fc38:( .autotmp_[0-9]+)+$" "live at call to fi38:( .autotmp_[0-9]+)+$" "stack object .autotmp_[0-9]+ string$"