From 0f7088ade502250a65402efde32c31f9c57f457b Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Tue, 21 Jan 2020 12:23:20 -0800 Subject: [PATCH] cmd/compile: dump contents when rulegen generates invalid code MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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í --- src/cmd/compile/internal/ssa/gen/rulegen.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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()) -- 2.50.0