mirror of
https://github.com/golang/go
synced 2024-11-23 10:10:02 -07:00
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 <r@golang.org>
This commit is contained in:
parent
0a3c991fd3
commit
fa1ea497d5
@ -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)
|
||||
|
@ -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 {
|
||||
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)
|
||||
}
|
||||
s.Fsym = s1
|
||||
|
||||
return s1
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user