cmd/gc: repair make(T) in export data for inlining.

When T was an unexported type it could be forgotten.

Fixes #5470.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/9303050
This commit is contained in:
Rémy Oudompheng 2013-05-16 09:01:43 +02:00
parent 0af302f507
commit 78f5b616fc
4 changed files with 54 additions and 1 deletions

View file

@ -165,12 +165,15 @@ reexportdep(Node *n)
case ODOTTYPE2:
case OSTRUCTLIT:
case OPTRLIT:
case OMAKEMAP:
case OMAKESLICE:
case OMAKECHAN:
t = n->type;
if(!t->sym && t->type)
t = t->type;
if(t && t->sym && t->sym->def && !exportedsym(t->sym)) {
if(debug['E'])
print("reexport type for convnop %S\n", t->sym);
print("reexport type for expression %S\n", t->sym);
exportlist = list(exportlist, t->sym->def);
}
break;

View file

@ -0,0 +1,27 @@
// Copyright 2013 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.
package a
type Foo interface {
Hi() string
}
func Test1() Foo { return make(tst1) }
type tst1 map[string]bool
func (r tst1) Hi() string { return "Hi!" }
func Test2() Foo { return make(tst2, 0) }
type tst2 []string
func (r tst2) Hi() string { return "Hi!" }
func Test3() Foo { return make(tst3) }
type tst3 chan string
func (r tst3) Hi() string { return "Hi!" }

View file

@ -0,0 +1,13 @@
// Copyright 2013 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.
package b
import "./a"
func main() {
a.Test1()
a.Test2()
a.Test3()
}

View file

@ -0,0 +1,10 @@
// compiledir
// Copyright 2013 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.
// Issue 5470: exported data for inlining may miss
// the type argument of make.
package ignored