1
0
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:
Cuong Manh Le 2021-07-22 23:54:19 +07:00
parent 5ba06495c1
commit fca3e5c445
2 changed files with 34 additions and 1 deletions

View File

@ -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
View 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)
}