From: Russ Cox Date: Tue, 14 Jul 2015 00:50:51 +0000 (-0400) Subject: cmd/compile: define func value symbols at declaration X-Git-Tag: go1.5beta2~56 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fa1ea497d5d9ef16ba12fd3d99a495b7b836569d;p=gostls13.git cmd/compile: define func value symbols at declaration These used to be defined at use, but that breaks when shared libraries are involved. For #11480. Change-Id: I416a848754fb615c0d75f9f0ccc00723d07f7f01 Reviewed-on: https://go-review.googlesource.com/12145 Reviewed-by: Rob Pike --- diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index 24af94c0cd..65f77d9079 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -199,6 +199,7 @@ func makeclosure(func_ *Node) *Node { xfunc.Func.Nname.Name.Funcdepth = func_.Func.Depth xfunc.Func.Depth = func_.Func.Depth xfunc.Func.Endlineno = func_.Func.Endlineno + makefuncsym(xfunc.Func.Nname.Sym) xfunc.Nbody = func_.Nbody xfunc.Func.Dcl = concat(func_.Func.Dcl, xfunc.Func.Dcl) diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go index cba8e21705..0cb04eead6 100644 --- a/src/cmd/compile/internal/gc/dcl.go +++ b/src/cmd/compile/internal/gc/dcl.go @@ -585,6 +585,10 @@ func funchdr(n *Node) { Fatal("funchdr: dclcontext") } + if importpkg == nil && n.Func.Nname != nil { + makefuncsym(n.Func.Nname.Sym) + } + dclcontext = PAUTO markdcl() Funcdepth++ @@ -1489,12 +1493,16 @@ func funcsym(s *Sym) *Sym { } s1 := Pkglookup(s.Name+"·f", s.Pkg) - if s1.Def == nil { - s1.Def = newfuncname(s1) - s1.Def.Func.Shortname = newname(s) - funcsyms = list(funcsyms, s1.Def) - } s.Fsym = s1 - return s1 } + +func makefuncsym(s *Sym) { + if isblanksym(s) { + return + } + s1 := funcsym(s) + s1.Def = newfuncname(s1) + s1.Def.Func.Shortname = newname(s) + funcsyms = list(funcsyms, s1.Def) +}