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:
Rémy Oudompheng 2012-11-01 19:06:52 +01:00
parent 95329d4cd4
commit 8d95245d0d
5 changed files with 38 additions and 0 deletions

View file

@ -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;

View file

@ -0,0 +1,5 @@
package p1
type SockaddrUnix int
func (s SockaddrUnix) Error() string { return "blah" }

View file

@ -0,0 +1,5 @@
package p2
import "./p1"
func SockUnix() error { var s *p1.SockaddrUnix; return s }

View file

@ -0,0 +1,7 @@
package main
import "./p2"
func main() {
_ = p2.SockUnix()
}

10
test/fixedbugs/bug467.go Normal file
View 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