From: Josh Bleecher Snyder Date: Tue, 21 Jan 2020 20:23:20 +0000 (-0800) Subject: cmd/compile: dump contents when rulegen generates invalid code X-Git-Tag: go1.15beta1~1170 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0f7088ade502250a65402efde32c31f9c57f457b;p=gostls13.git cmd/compile: dump contents when rulegen generates invalid code 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 TryBot-Result: Gobot Gobot Reviewed-by: Daniel Martí --- diff --git a/src/cmd/compile/internal/ssa/gen/rulegen.go b/src/cmd/compile/internal/ssa/gen/rulegen.go index 47cf5f15da..5a22280218 100644 --- a/src/cmd/compile/internal/ssa/gen/rulegen.go +++ b/src/cmd/compile/internal/ssa/gen/rulegen.go @@ -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())