aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2021-06-27 01:31:03 +0700
committerCuong Manh Le <cuong.manhle.vn@gmail.com>2021-06-27 09:38:56 +0000
commit20a04f60417b60ab5c1ce2dfcdefce1ff57f5914 (patch)
tree38d14cbbd349e47f2f761979035a032eb2018da9
parent1b995f91a526ff165952218848c3173026a8dc53 (diff)
downloadgo-20a04f60417b60ab5c1ce2dfcdefce1ff57f5914.tar.gz
go-20a04f60417b60ab5c1ce2dfcdefce1ff57f5914.zip
[dev.typeparams] cmd/compile: delay method value wrapper generation until walk
As walk already create the wrapper if necessary. With this change, test/inline.go need to be changed to use errorcheckwithauto, for matching "inlining call to ..." in autogenerated position for method value wrapper, since when we don't generate the wrapper immediately during typecheck. Change-Id: I9ffbec9ad3c2b7295546976e2fa517336c13c89b Reviewed-on: https://go-review.googlesource.com/c/go/+/330838 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>
-rw-r--r--src/cmd/compile/internal/typecheck/expr.go2
-rw-r--r--test/inline.go6
2 files changed, 5 insertions, 3 deletions
diff --git a/src/cmd/compile/internal/typecheck/expr.go b/src/cmd/compile/internal/typecheck/expr.go
index f039cbab08..7e974dfda8 100644
--- a/src/cmd/compile/internal/typecheck/expr.go
+++ b/src/cmd/compile/internal/typecheck/expr.go
@@ -542,7 +542,7 @@ func tcDot(n *ir.SelectorExpr, top int) ir.Node {
if (n.Op() == ir.ODOTINTER || n.Op() == ir.ODOTMETH) && top&ctxCallee == 0 {
n.SetOp(ir.OMETHVALUE)
- n.SetType(MethodValueWrapper(n).Type())
+ n.SetType(NewMethodType(n.Type(), nil))
}
return n
}
diff --git a/test/inline.go b/test/inline.go
index 472a941dca..2cda07b2da 100644
--- a/test/inline.go
+++ b/test/inline.go
@@ -1,4 +1,4 @@
-// errorcheck -0 -m -d=inlfuncswithclosures=1
+// errorcheckwithauto -0 -m -d=inlfuncswithclosures=1
// Copyright 2015 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -169,6 +169,7 @@ func k() (T, int, int) { return T{}, 0, 0 } // ERROR "can inline k"
func _() { // ERROR "can inline _"
T.meth(k()) // ERROR "inlining call to k" "inlining call to T.meth"
+ // ERRORAUTO "inlining call to T.meth"
}
func small1() { // ERROR "can inline small1"
@@ -232,12 +233,13 @@ Loop:
// Issue #18493 - make sure we can do inlining of functions with a method value
type T1 struct{}
-func (a T1) meth(val int) int { // ERROR "can inline T1.meth" "inlining call to T1.meth"
+func (a T1) meth(val int) int { // ERROR "can inline T1.meth"
return val + 5
}
func getMeth(t1 T1) func(int) int { // ERROR "can inline getMeth"
return t1.meth // ERROR "t1.meth escapes to heap"
+ // ERRORAUTO "inlining call to T1.meth"
}
func ii() { // ERROR "can inline ii"