diff options
| author | Dominique Lefevre <domingolefevre@gmail.com> | 2023-08-24 10:17:36 +0300 |
|---|---|---|
| committer | Cherry Mui <cherryyz@google.com> | 2023-09-01 15:07:26 +0000 |
| commit | bb74a53c215a9e3ebf2c2b22bd60b06ce45f0b3b (patch) | |
| tree | 8ffb9c107e9150824081212f8d01953e88ef7d89 /src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go | |
| parent | 6b52bfa393a7f8942568e7a29816c673ff73f797 (diff) | |
| download | go-bb74a53c215a9e3ebf2c2b22bd60b06ce45f0b3b.tar.xz | |
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 <cherryyz@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Run-TryBot: Cherry Mui <cherryyz@google.com>
Diffstat (limited to 'src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go')
| -rw-r--r-- | src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go | 52 |
1 files changed, 52 insertions, 0 deletions
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}) +} |
