1// run
2
3// Copyright 2022 The Go Authors. All rights reserved.
4// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file.
6
7// The inliner would erroneously scan the caller function's body for
8// reassignments *before* substituting the inlined function call body,
9// which could cause false positives in deciding when it's safe to
10// transitively inline indirect function calls.
11
12package main
13
14func main() {
15	bug1()
16	bug2(fail)
17}
18
19func bug1() {
20	fn := fail
21	fn = pass
22	fn()
23}
24
25func bug2(fn func()) {
26	fn = pass
27	fn()
28}
29
30func pass() {}
31func fail() { panic("FAIL") }
32