From bb74a53c215a9e3ebf2c2b22bd60b06ce45f0b3b Mon Sep 17 00:00:00 2001 From: Dominique Lefevre Date: Thu, 24 Aug 2023 10:17:36 +0300 Subject: cmd/link: add testcases for MethodByName(string literal). Change-Id: I96ea268ecceea75a24303526ed2f17c8a5e142c1 Reviewed-on: https://go-review.googlesource.com/c/go/+/522438 Reviewed-by: Cherry Mui TryBot-Result: Gopher Robot Reviewed-by: Dmitri Shuralyov Run-TryBot: Cherry Mui --- .../ld/testdata/deadcode/structof_funcof.go | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go (limited to 'src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go') diff --git a/src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go b/src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go new file mode 100644 index 0000000000..bec5f25fc0 --- /dev/null +++ b/src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go @@ -0,0 +1,52 @@ +// 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. + +// Methods of reflect.rtype use StructOf and FuncOf which in turn depend on +// reflect.Value.Method. StructOf and FuncOf must not disable the DCE. + +package main + +import "reflect" + +type S int + +func (s S) M() { println("S.M") } + +func (s S) N() { println("S.N") } + +type T float64 + +func (t T) F(s S) {} + +func useStructOf() { + t := reflect.StructOf([]reflect.StructField{ + { + Name: "X", + Type: reflect.TypeOf(int(0)), + }, + }) + println(t.Name()) +} + +func useFuncOf() { + t := reflect.FuncOf( + []reflect.Type{reflect.TypeOf(int(0))}, + []reflect.Type{reflect.TypeOf(int(0))}, + false, + ) + println(t.Name()) +} + +func main() { + useStructOf() + useFuncOf() + + var t T + meth, _ := reflect.TypeOf(t).MethodByName("F") + ft := meth.Type + at := ft.In(1) + v := reflect.New(at).Elem() + methV := v.MethodByName("M") + methV.Call([]reflect.Value{v}) +} -- cgit v1.3-5-g9baa