aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go
diff options
context:
space:
mode:
authorDominique Lefevre <domingolefevre@gmail.com>2023-08-24 10:17:36 +0300
committerCherry Mui <cherryyz@google.com>2023-09-01 15:07:26 +0000
commitbb74a53c215a9e3ebf2c2b22bd60b06ce45f0b3b (patch)
tree8ffb9c107e9150824081212f8d01953e88ef7d89 /src/cmd/link/internal/ld/testdata/deadcode/structof_funcof.go
parent6b52bfa393a7f8942568e7a29816c673ff73f797 (diff)
downloadgo-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.go52
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})
+}