Logo
Explore Help
Sign In
1berry/go
1
0
Fork 0
You've already forked go
Code Issues Packages Projects Releases Wiki Activity
go/test/reflectmethod6.go

33 lines
555 B
Go
Raw Normal View History

cmd/compile: when marking REFLECTMETHOD, check for reflect package itself reflect.Type.Method (and MethodByName) can be used to obtain a reference of a method by reflection. The linker needs to know if reflect.Type.Method is called, and retain all exported methods accordingly. This is handled by the compiler, which marks the caller of reflect.Type.Method with REFLECTMETHOD attribute. The current code failed to handle the reflect package itself, so the method wrapper reflect.Type.Method is not marked. This CL fixes it. Fixes #38515. Change-Id: I12904d23eda664cf1794bc3676152f3218fb762b Reviewed-on: https://go-review.googlesource.com/c/go/+/228880 Run-TryBot: Cherry Zhang <cherryyz@google.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-18 17:47:54 -04:00
// run
// Copyright 2020 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.
// Similar to reflectmethod5.go, but for reflect.Type.MethodByName.
package main
import "reflect"
var called bool
type foo struct{}
func (foo) X() { called = true }
var h = reflect.Type.MethodByName
func main() {
v := reflect.ValueOf(foo{})
m, ok := h(v.Type(), "X")
if !ok {
panic("FAIL")
}
f := m.Func.Interface().(func(foo))
f(foo{})
if !called {
panic("FAIL")
}
}
Reference in New Issue Copy Permalink
Powered by Gitea Version: 1.23.8 Page: 537ms Template: 4ms
English
Bahasa Indonesia Deutsch English Español Français Gaeilge Italiano Latviešu Magyar nyelv Nederlands Polski Português de Portugal Português do Brasil Suomi Svenska Türkçe Čeština Ελληνικά Български Русский Українська فارسی മലയാളം 日本語 简体中文 繁體中文(台灣) 繁體中文(香港) 한국어
Licenses API