// 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. //go:build go1.21 package main import ( "fmt" "os" ) var is []func() int func inline(j, k int) []*int { var a []*int for private := j; private < k; private++ { a = append(a, &private) } return a } //go:noinline func notinline(j, k int) ([]*int, *int) { for shared := j; shared < k; shared++ { if shared == k/2 { // want the call inlined, want "private" in that inline to be transformed, // (believe it ends up on init node of the return). // but do not want "shared" transformed, return inline(j, k), &shared } } return nil, &j } func main() { a, p := notinline(2, 9) fmt.Printf("a[0]=%d,*p=%d\n", *a[0], *p) if *a[0] != 2 { os.Exit(1) } }