| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package test | |
| import ( | |
| "internal/testenv" | |
| "os" | |
| "path/filepath" | |
| "testing" | |
| ) | |
| const helloSrc = ` | |
| package main | |
| import "fmt" | |
| func main() { fmt.Println("hello") } | |
| ` | |
| func TestClobberDead(t *testing.T) { | |
| // Test that clobberdead mode generates correct program. | |
| runHello(t, "-clobberdead") | |
| } | |
| func TestClobberDeadReg(t *testing.T) { | |
| // Test that clobberdeadreg mode generates correct program. | |
| runHello(t, "-clobberdeadreg") | |
| } | |
| func runHello(t *testing.T, flag string) { | |
| if testing.Short() { | |
| // This test rebuilds the runtime with a special flag, which | |
| // takes a while. | |
| t.Skip("skip in short mode") | |
| } | |
| testenv.MustHaveGoRun(t) | |
| t.Parallel() | |
| tmpdir := t.TempDir() | |
| src := filepath.Join(tmpdir, "x.go") | |
| err := os.WriteFile(src, []byte(helloSrc), 0644) | |
| if err != nil { | |
| t.Fatalf("write file failed: %v", err) | |
| } | |
| cmd := testenv.Command(t, testenv.GoToolPath(t), "run", "-gcflags=all="+flag, src) | |
| out, err := cmd.CombinedOutput() | |
| if err != nil { | |
| t.Fatalf("go run failed: %v\n%s", err, out) | |
| } | |
| if string(out) != "hello\n" { | |
| t.Errorf("wrong output: got %q, want %q", out, "hello\n") | |
| } | |
| } |