]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile: explain why reader.funcExt need to set n.Defn
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Sun, 20 Jun 2021 15:17:19 +0000 (22:17 +0700)
committerCuong Manh Le <cuong.manhle.vn@gmail.com>
Mon, 21 Jun 2021 04:53:21 +0000 (04:53 +0000)
Change-Id: I1a7d669879af57a1c1f48ce63ff0d214b694e680
Reviewed-on: https://go-review.googlesource.com/c/go/+/329572
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>
src/cmd/compile/internal/noder/reader.go

index ad3cc25fd0bd945da77dcf3ccf98ddabf98b02db..4fc9e7a777a7bcb43019305b1c3b7f924fbec81e 100644 (file)
@@ -741,8 +741,13 @@ func (r *reader) funcExt(name *ir.Name) {
                fn.SetPos(name.Pos())
        }
 
-       // TODO(mdempsky): Remember why I wrote this code. I think it has to
-       // do with how ir.VisitFuncsBottomUp works?
+       // Normally, we only compile local functions, which saves redundant compilation work.
+       // n.Defn is not nil for local functions, and is nil for imported function. But for
+       // generic functions, we might have an instantiation that no other package has seen before.
+       // So we need to be conservative and compile it again.
+       //
+       // That's why name.Defn is set here, so ir.VisitFuncsBottomUp can analyze function.
+       // TODO(mdempsky,cuonglm): find a cleaner way to handle this.
        if name.Sym().Pkg == types.LocalPkg || r.hasTypeParams() {
                name.Defn = fn
        }