Initial commit: Go 1.23 release state
This commit is contained in:
60
test/typeparam/issue58513.go
Normal file
60
test/typeparam/issue58513.go
Normal file
@@ -0,0 +1,60 @@
|
||||
// run
|
||||
|
||||
// Copyright 2023 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.
|
||||
|
||||
// Some derived-type expressions require the compiler to synthesize
|
||||
// function literals to plumb sub-dictionaries appropriately.
|
||||
// However, when these expressions are inlined, we were constructing
|
||||
// the function literal bodies with the inline-adjusted positions
|
||||
// instead of the original (inline-free) positions, which could lead
|
||||
// to infinite loops when unwinding the stack.
|
||||
|
||||
package main
|
||||
|
||||
import "runtime"
|
||||
|
||||
func assert[_ any]() {
|
||||
panic(0)
|
||||
}
|
||||
|
||||
func Assert[To any]() func() {
|
||||
return assert[To]
|
||||
}
|
||||
|
||||
type asserter[_ any] struct{}
|
||||
|
||||
func (asserter[_]) assert() {
|
||||
panic(0)
|
||||
}
|
||||
|
||||
func AssertMV[To any]() func() {
|
||||
return asserter[To]{}.assert
|
||||
}
|
||||
|
||||
func AssertME[To any]() func(asserter[To]) {
|
||||
return asserter[To].assert
|
||||
}
|
||||
|
||||
var me = AssertME[string]()
|
||||
|
||||
var tests = []func(){
|
||||
Assert[int](),
|
||||
AssertMV[int](),
|
||||
func() { me(asserter[string]{}) },
|
||||
}
|
||||
|
||||
func main() {
|
||||
for _, test := range tests {
|
||||
func() {
|
||||
defer func() {
|
||||
recover()
|
||||
|
||||
// Check that we can unwind the stack without infinite looping.
|
||||
runtime.Caller(1000)
|
||||
}()
|
||||
test()
|
||||
}()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user