Source file test/typeparam/issue47925c.go

     1  // run
     2  
     3  // Copyright 2021 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  type I[T any] interface {
    10  	foo()
    11  }
    12  
    13  type J[T any] interface {
    14  	foo()
    15  	bar()
    16  }
    17  
    18  //go:noinline
    19  func f[T J[T]](x T) I[T] {
    20  	// contains a cast between two nonempty interfaces
    21  	return I[T](J[T](x))
    22  }
    23  
    24  type S struct {
    25  	x int
    26  }
    27  
    28  func (s *S) foo() {}
    29  func (s *S) bar() {}
    30  
    31  func main() {
    32  	i := f(&S{x: 7})
    33  	if i.(*S).x != 7 {
    34  		panic("bad")
    35  	}
    36  }
    37  

View as plain text