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>
diff --git a/src/cmd/compile/internal/gc/dcl.go b/src/cmd/compile/internal/gc/dcl.go
index cba8e21..0cb04ee 100644
--- a/src/cmd/compile/internal/gc/dcl.go
+++ b/src/cmd/compile/internal/gc/dcl.go
@@ -585,6 +585,10 @@
Fatal("funchdr: dclcontext")
}
+ if importpkg == nil && n.Func.Nname != nil {
+ makefuncsym(n.Func.Nname.Sym)
+ }
+
dclcontext = PAUTO
markdcl()
Funcdepth++
@@ -1489,12 +1493,16 @@
}
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)
+}