diff options
Diffstat (limited to '')
-rw-r--r-- | test/fixedbugs/issue50672.go | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/test/fixedbugs/issue50672.go b/test/fixedbugs/issue50672.go new file mode 100644 index 0000000..178786a --- /dev/null +++ b/test/fixedbugs/issue50672.go @@ -0,0 +1,105 @@ +// 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()) +} |