mirror of
https://github.com/golang/go
synced 2024-11-26 05:27:57 -07:00
[dev.typeparams] cmd/compile: fix missing condition in usemethod
CL 330670 simplified usemethod, but dropped the previous condition to ensure the function have 1 or 2 result. This CL restore that condition, and also add a test for it. Change-Id: I434e3736785b43ceea0b386d8d9d01ad78a4ccd2 Reviewed-on: https://go-review.googlesource.com/c/go/+/336609 Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com> Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
5ba06495c1
commit
fca3e5c445
@ -957,7 +957,14 @@ func usemethod(n *ir.CallExpr) {
|
|||||||
if t.NumParams() != 1 || t.Params().Field(0).Type.Kind() != pKind {
|
if t.NumParams() != 1 || t.Params().Field(0).Type.Kind() != pKind {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if t.NumResults() == 2 && t.Results().Field(1).Type.Kind() != types.TBOOL {
|
switch t.NumResults() {
|
||||||
|
case 1:
|
||||||
|
// ok
|
||||||
|
case 2:
|
||||||
|
if t.Results().Field(1).Type.Kind() != types.TBOOL {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
default:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
26
test/reflectmethod8.go
Normal file
26
test/reflectmethod8.go
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// compile
|
||||||
|
|
||||||
|
// Copyright 2021 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.
|
||||||
|
|
||||||
|
// Make sure that the compiler can analyze non-reflect
|
||||||
|
// Type.{Method,MethodByName} calls.
|
||||||
|
|
||||||
|
package p
|
||||||
|
|
||||||
|
type I interface {
|
||||||
|
MethodByName(string)
|
||||||
|
Method(int)
|
||||||
|
}
|
||||||
|
|
||||||
|
type M struct{}
|
||||||
|
|
||||||
|
func (M) MethodByName(string) {}
|
||||||
|
func (M) Method(int) {}
|
||||||
|
|
||||||
|
func f() {
|
||||||
|
var m M
|
||||||
|
I.MethodByName(m, "")
|
||||||
|
I.Method(m, 42)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user