0
1
mirror of https://github.com/golang/go synced 2024-09-22 05:40:53 +00:00
go/test/fixedbugs/issue65962.go
khr@golang.org 2589a89468 runtime: don't re-initialize itab while looking for missing function
The itab we're initializing again, just to figure out which method
is missing, might be stored in read-only memory.
This can only happen in certain weird generics situations, so it is
pretty rare, but it causes a runtime crash when it does happen.

Fixes #65962

Change-Id: Ia86e216fe33950a794ad8e475e76317f799e9136
Reviewed-on: https://go-review.googlesource.com/c/go/+/567615
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Keith Randall <khr@google.com>
2024-02-29 18:30:40 +00:00

49 lines
625 B
Go

// run
// Copyright 2024 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
func main() {
test1()
test2()
}
type I interface {
f()
g()
h()
}
//go:noinline
func ld[T any]() {
var x I
if _, ok := x.(T); ok {
}
}
func isI(x any) {
_ = x.(I)
}
func test1() {
defer func() { recover() }()
ld[bool]() // add <bool,I> itab to binary
_ = any(false).(I)
}
type B bool
func (B) f() {
}
func (B) g() {
}
func test2() {
defer func() { recover() }()
ld[B]() // add <B,I> itab to binary
_ = any(B(false)).(I)
}