| // Copyright 2023 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 main |
| |
| import ( |
| "cmd/compile/internal/loopvar/testdata/inlines/a" |
| "cmd/compile/internal/loopvar/testdata/inlines/b" |
| "cmd/compile/internal/loopvar/testdata/inlines/c" |
| "fmt" |
| "os" |
| ) |
| |
| func sum(s []*int) int { |
| sum := 0 |
| for _, pi := range s { |
| sum += *pi |
| } |
| return sum |
| } |
| |
| var t []*int |
| |
| func F() []*int { |
| var s []*int |
| for i, j := 0, 0; j < 10; i, j = i+1, j+1 { |
| s = append(s, &i) |
| t = append(s, &j) |
| } |
| return s |
| } |
| |
| func main() { |
| f := F() |
| af := a.F() |
| bf, _ := b.F() |
| abf := a.Fb() |
| cf := c.F() |
| |
| sf, saf, sbf, sabf, scf := sum(f), sum(af), sum(bf), sum(abf), sum(cf) |
| |
| fmt.Printf("f, af, bf, abf, cf sums = %d, %d, %d, %d, %d\n", sf, saf, sbf, sabf, scf) |
| |
| // Special failure just for use with hash searching, to prove it fires exactly once. |
| // To test: `gossahash -e loopvarhash go run .` in this directory. |
| // This is designed to fail in two different ways, because gossahash searches randomly |
| // it will find both failures over time. |
| if os.Getenv("GOCOMPILEDEBUG") != "" && (sabf == 45 || sf == 45) { |
| os.Exit(11) |
| } |
| os.Exit(0) |
| } |