github.com/go-asm/go@v1.21.1-0.20240213172139-40c5ead50c48/cmd/compile/loopvar/testdata/opt.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package main 6 7 import ( 8 "fmt" 9 "os" 10 ) 11 12 var is []func() int 13 14 func inline(j, k int) []*int { 15 var a []*int 16 for private := j; private < k; private++ { 17 a = append(a, &private) 18 } 19 return a 20 } 21 22 //go:noinline 23 func notinline(j, k int) ([]*int, *int) { 24 for shared := j; shared < k; shared++ { 25 if shared == k/2 { 26 // want the call inlined, want "private" in that inline to be transformed, 27 // (believe it ends up on init node of the return). 28 // but do not want "shared" transformed, 29 return inline(j, k), &shared 30 } 31 } 32 return nil, &j 33 } 34 35 func main() { 36 a, p := notinline(2, 9) 37 fmt.Printf("a[0]=%d,*p=%d\n", *a[0], *p) 38 if *a[0] != 2 { 39 os.Exit(1) 40 } 41 }