mirror of
https://github.com/golang/go
synced 2024-11-25 14:27:57 -07:00
106 lines
1.2 KiB
Go
106 lines
1.2 KiB
Go
|
// run
|
||
|
|
||
|
// Copyright 2022 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
|
||
|
|
||
|
var ok = false
|
||
|
|
||
|
func f() func(int, int) int {
|
||
|
ok = true
|
||
|
return func(int, int) int { return 0 }
|
||
|
}
|
||
|
|
||
|
func g() (int, int) {
|
||
|
if !ok {
|
||
|
panic("FAIL")
|
||
|
}
|
||
|
return 0, 0
|
||
|
}
|
||
|
|
||
|
var _ = f()(g())
|
||
|
|
||
|
func main() {
|
||
|
f1()
|
||
|
f2()
|
||
|
f3()
|
||
|
f4()
|
||
|
}
|
||
|
|
||
|
func f1() {
|
||
|
ok := false
|
||
|
|
||
|
f := func() func(int, int) {
|
||
|
ok = true
|
||
|
return func(int, int) {}
|
||
|
}
|
||
|
g := func() (int, int) {
|
||
|
if !ok {
|
||
|
panic("FAIL")
|
||
|
}
|
||
|
return 0, 0
|
||
|
}
|
||
|
|
||
|
f()(g())
|
||
|
}
|
||
|
|
||
|
type S struct{}
|
||
|
|
||
|
func (S) f(int, int) {}
|
||
|
|
||
|
func f2() {
|
||
|
ok := false
|
||
|
|
||
|
f := func() S {
|
||
|
ok = true
|
||
|
return S{}
|
||
|
}
|
||
|
g := func() (int, int) {
|
||
|
if !ok {
|
||
|
panic("FAIL")
|
||
|
}
|
||
|
return 0, 0
|
||
|
}
|
||
|
|
||
|
f().f(g())
|
||
|
}
|
||
|
|
||
|
func f3() {
|
||
|
ok := false
|
||
|
|
||
|
f := func() []func(int, int) {
|
||
|
ok = true
|
||
|
return []func(int, int){func(int, int) {}}
|
||
|
}
|
||
|
g := func() (int, int) {
|
||
|
if !ok {
|
||
|
panic("FAIL")
|
||
|
}
|
||
|
return 0, 0
|
||
|
}
|
||
|
f()[0](g())
|
||
|
}
|
||
|
|
||
|
type G[T any] struct{}
|
||
|
|
||
|
func (G[T]) f(int, int) {}
|
||
|
|
||
|
func f4() {
|
||
|
ok := false
|
||
|
|
||
|
f := func() G[int] {
|
||
|
ok = true
|
||
|
return G[int]{}
|
||
|
}
|
||
|
g := func() (int, int) {
|
||
|
if !ok {
|
||
|
panic("FAIL")
|
||
|
}
|
||
|
return 0, 0
|
||
|
}
|
||
|
|
||
|
f().f(g())
|
||
|
}
|