]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: dump contents when rulegen generates invalid code
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 21 Jan 2020 20:23:20 +0000 (12:23 -0800)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 20 Feb 2020 22:33:55 +0000 (22:33 +0000)
It's much easier to debug when you can see
the contents in order to interpret the error message.

Change-Id: I03bbb9dd3071aeca9577cc725a60d43f78118cf4
Reviewed-on: https://go-review.googlesource.com/c/go/+/215717
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
src/cmd/compile/internal/ssa/gen/rulegen.go

index 47cf5f15da467e627caae26e112f84cabe0fcf36..5a222802185486d70f5d26ba202722687c29f9da 100644 (file)
@@ -22,6 +22,7 @@ import (
        "go/printer"
        "go/token"
        "io"
+       "io/ioutil"
        "log"
        "os"
        "path"
@@ -264,7 +265,13 @@ func genRulesSuffix(arch arch, suff string) {
        fset := token.NewFileSet()
        file, err := parser.ParseFile(fset, "", buf, parser.ParseComments)
        if err != nil {
-               log.Fatal(err)
+               filename := fmt.Sprintf("%s_broken.go", arch.name)
+               if err := ioutil.WriteFile(filename, buf.Bytes(), 0644); err != nil {
+                       log.Printf("failed to dump broken code to %s: %v", filename, err)
+               } else {
+                       log.Printf("dumped broken code to %s", filename)
+               }
+               log.Fatalf("failed to parse generated code for arch %s: %v", arch.name, err)
        }
        tfile := fset.File(file.Pos())