Source file test/fixedbugs/issue50672.go

     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  package main
     8  
     9  var ok = false
    10  
    11  func f() func(int, int) int {
    12  	ok = true
    13  	return func(int, int) int { return 0 }
    14  }
    15  
    16  func g() (int, int) {
    17  	if !ok {
    18  		panic("FAIL")
    19  	}
    20  	return 0, 0
    21  }
    22  
    23  var _ = f()(g())
    24  
    25  func main() {
    26  	f1()
    27  	f2()
    28  	f3()
    29  	f4()
    30  }
    31  
    32  func f1() {
    33  	ok := false
    34  
    35  	f := func() func(int, int) {
    36  		ok = true
    37  		return func(int, int) {}
    38  	}
    39  	g := func() (int, int) {
    40  		if !ok {
    41  			panic("FAIL")
    42  		}
    43  		return 0, 0
    44  	}
    45  
    46  	f()(g())
    47  }
    48  
    49  type S struct{}
    50  
    51  func (S) f(int, int) {}
    52  
    53  func f2() {
    54  	ok := false
    55  
    56  	f := func() S {
    57  		ok = true
    58  		return S{}
    59  	}
    60  	g := func() (int, int) {
    61  		if !ok {
    62  			panic("FAIL")
    63  		}
    64  		return 0, 0
    65  	}
    66  
    67  	f().f(g())
    68  }
    69  
    70  func f3() {
    71  	ok := false
    72  
    73  	f := func() []func(int, int) {
    74  		ok = true
    75  		return []func(int, int){func(int, int) {}}
    76  	}
    77  	g := func() (int, int) {
    78  		if !ok {
    79  			panic("FAIL")
    80  		}
    81  		return 0, 0
    82  	}
    83  	f()[0](g())
    84  }
    85  
    86  type G[T any] struct{}
    87  
    88  func (G[T]) f(int, int) {}
    89  
    90  func f4() {
    91  	ok := false
    92  
    93  	f := func() G[int] {
    94  		ok = true
    95  		return G[int]{}
    96  	}
    97  	g := func() (int, int) {
    98  		if !ok {
    99  			panic("FAIL")
   100  		}
   101  		return 0, 0
   102  	}
   103  
   104  	f().f(g())
   105  }
   106  

View as plain text