/
githubmirror
/
go
Обзор
Документация
Войти
/
githubmirror
/
go
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
test/fixedbugs/issue50672.go
105 строк
1 KB
Cuong Manh Le
cmd/compile: fix bad order of evaluation for multi-value f()(g()) calls
11 май 2022, 11:12
11 май 2022, 11:12
7b314d2
Код
Авторство
О чём код?
// 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()) }