mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
cmd/gc: fix incomplete export data when inlining with local variables.
When local declarations needed unexported types, these could be missing in the export data. Fixes build with -gcflags -lll, except for exp/gotype. R=golang-dev, rsc, lvd CC=golang-dev https://golang.org/cl/6813067
This commit is contained in:
parent
95329d4cd4
commit
8d95245d0d
5 changed files with 38 additions and 0 deletions
|
@ -119,6 +119,17 @@ reexportdep(Node *n)
|
|||
}
|
||||
break;
|
||||
|
||||
case ODCL:
|
||||
// Local variables in the bodies need their type.
|
||||
t = n->left->type;
|
||||
if(t != types[t->etype] && t != idealbool && t != idealstring) {
|
||||
if(isptr[t->etype])
|
||||
t = t->type;
|
||||
if (t && t->sym && t->sym->def && t->sym->pkg != localpkg && t->sym->pkg != builtinpkg) {
|
||||
exportlist = list(exportlist, t->sym->def);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case OLITERAL:
|
||||
t = n->type;
|
||||
|
|
5
test/fixedbugs/bug467.dir/p1.go
Normal file
5
test/fixedbugs/bug467.dir/p1.go
Normal file
|
@ -0,0 +1,5 @@
|
|||
package p1
|
||||
|
||||
type SockaddrUnix int
|
||||
|
||||
func (s SockaddrUnix) Error() string { return "blah" }
|
5
test/fixedbugs/bug467.dir/p2.go
Normal file
5
test/fixedbugs/bug467.dir/p2.go
Normal file
|
@ -0,0 +1,5 @@
|
|||
package p2
|
||||
|
||||
import "./p1"
|
||||
|
||||
func SockUnix() error { var s *p1.SockaddrUnix; return s }
|
7
test/fixedbugs/bug467.dir/p3.go
Normal file
7
test/fixedbugs/bug467.dir/p3.go
Normal file
|
@ -0,0 +1,7 @@
|
|||
package main
|
||||
|
||||
import "./p2"
|
||||
|
||||
func main() {
|
||||
_ = p2.SockUnix()
|
||||
}
|
10
test/fixedbugs/bug467.go
Normal file
10
test/fixedbugs/bug467.go
Normal file
|
@ -0,0 +1,10 @@
|
|||
// compiledir
|
||||
|
||||
// Copyright 2012 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Exported data for inlining could forget types of
|
||||
// local variables declared in inlinable bodies.
|
||||
|
||||
package ignored
|
Loading…
Reference in a new issue