From ac8966aa581a4b5178d40bca36854461f234f85e Mon Sep 17 00:00:00 2001 From: Michael Munday Date: Fri, 11 Oct 2019 08:50:12 -0700 Subject: [PATCH] cmd/compile/internal/ssa: fix block AuxIntType lookup MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Avoid an out-of-range error when calling LongString on a generic block. Change-Id: I33ca88940d899bc71e3155bc63d2aa925cf83230 Reviewed-on: https://go-review.googlesource.com/c/go/+/200737 Run-TryBot: Michael Munday TryBot-Result: Gobot Gobot Reviewed-by: Daniel Martí --- src/cmd/compile/internal/ssa/gen/main.go | 8 +++++--- src/cmd/compile/internal/ssa/opGen.go | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cmd/compile/internal/ssa/gen/main.go b/src/cmd/compile/internal/ssa/gen/main.go index 93ddbf5477..55ba338efa 100644 --- a/src/cmd/compile/internal/ssa/gen/main.go +++ b/src/cmd/compile/internal/ssa/gen/main.go @@ -221,17 +221,19 @@ func genOp() { fmt.Fprintln(w, "func (k BlockKind) String() string {return blockString[k]}") // generate block kind auxint method - fmt.Fprintln(w, "var blockAuxIntType = [...]string{") + fmt.Fprintln(w, "func (k BlockKind) AuxIntType() string {") + fmt.Fprintln(w, "switch k {") for _, a := range archs { for _, b := range a.blocks { if b.auxint == "" { continue } - fmt.Fprintf(w, "Block%s%s:\"%s\",\n", a.Name(), b.name, b.auxint) + fmt.Fprintf(w, "case Block%s%s: return \"%s\"\n", a.Name(), b.name, b.auxint) } } fmt.Fprintln(w, "}") - fmt.Fprintln(w, "func (k BlockKind) AuxIntType() string {return blockAuxIntType[k]}") + fmt.Fprintln(w, "return \"\"") + fmt.Fprintln(w, "}") // generate Op* declarations fmt.Fprintln(w, "const (") diff --git a/src/cmd/compile/internal/ssa/opGen.go b/src/cmd/compile/internal/ssa/opGen.go index c30654dda7..6ac86bbb9e 100644 --- a/src/cmd/compile/internal/ssa/opGen.go +++ b/src/cmd/compile/internal/ssa/opGen.go @@ -248,16 +248,20 @@ var blockString = [...]string{ } func (k BlockKind) String() string { return blockString[k] } - -var blockAuxIntType = [...]string{ - BlockS390XCIJ: "Int8", - BlockS390XCGIJ: "Int8", - BlockS390XCLIJ: "UInt8", - BlockS390XCLGIJ: "UInt8", +func (k BlockKind) AuxIntType() string { + switch k { + case BlockS390XCIJ: + return "Int8" + case BlockS390XCGIJ: + return "Int8" + case BlockS390XCLIJ: + return "UInt8" + case BlockS390XCLGIJ: + return "UInt8" + } + return "" } -func (k BlockKind) AuxIntType() string { return blockAuxIntType[k] } - const ( OpInvalid Op = iota -- 2.50.0