]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: don't crash on -d=ssa/
authorDaniel Martí <mvdan@mvdan.cc>
Sun, 16 Dec 2018 17:44:31 +0000 (18:44 +0100)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 26 Feb 2019 17:50:01 +0000 (17:50 +0000)
I forgot how to pull up the ssa debug options help, so instead of
writing -d=ssa/help, I just wrote -d=ssa/. Much to my amusement, the
compiler just crashed, as shown below. Fix that.

panic: runtime error: index out of range

goroutine 1 [running]:
cmd/compile/internal/ssa.PhaseOption(0x7ffc375d2b70, 0x0, 0xdbff91, 0x5, 0x1, 0x0, 0x0, 0x1, 0x1)
    /home/mvdan/tip/src/cmd/compile/internal/ssa/compile.go:327 +0x1876
cmd/compile/internal/gc.Main(0xde7bd8)
    /home/mvdan/tip/src/cmd/compile/internal/gc/main.go:411 +0x41d0
main.main()
    /home/mvdan/tip/src/cmd/compile/main.go:51 +0xab

Change-Id: Ia2ad394382ddf8f4498b16b5cfb49be0317fc1aa
Reviewed-on: https://go-review.googlesource.com/c/154421
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/cmd/compile/internal/ssa/compile.go
src/cmd/go/testdata/script/gcflags_patterns.txt

index 29618e29c37fc442efd22ffbd779e81b26400a61..38f12abf1858cff7134cb8d803856e5eead37af2 100644 (file)
@@ -212,7 +212,8 @@ var BuildDump string // name of function to dump after initial build of ssa
 // BOOT_GO_GCFLAGS=-d='ssa/~^.*scc$/off' GO_GCFLAGS='-d=ssa/~^.*scc$/off' ./make.bash
 //
 func PhaseOption(phase, flag string, val int, valString string) string {
-       if phase == "help" {
+       switch phase {
+       case "", "help":
                lastcr := 0
                phasenames := "    check, all, build, intrinsics"
                for _, p := range passes {
index f2e6e2b67da8c155cef9f60893707c0313b54c5b..c790ddda0aa5bd5f7480c4d1b8b2f5e069ffa127 100644 (file)
@@ -27,6 +27,10 @@ stderr 'compile.* -e.* -p z1'
 go test -c -n -gcflags='all=-e' z1
 stderr 'compile.* -e.* -p z3 '
 
+# this particular -gcflags argument made the compiler crash
+! go build -gcflags=-d=ssa/ z1
+stderr 'PhaseOptions usage'
+
 # -ldflags for implicit test package applies to test binary
 go test -c -n -gcflags=-N -ldflags=-X=x.y=z z1
 stderr 'compile.* -N .*z_test.go'