mirror of
https://github.com/golang/go
synced 2024-11-05 18:36:08 +00:00
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:
parent
0af302f507
commit
78f5b616fc
4 changed files with 54 additions and 1 deletions
|
@ -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;
|
||||
|
|
27
test/fixedbugs/issue5470.dir/a.go
Normal file
27
test/fixedbugs/issue5470.dir/a.go
Normal 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!" }
|
13
test/fixedbugs/issue5470.dir/b.go
Normal file
13
test/fixedbugs/issue5470.dir/b.go
Normal 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()
|
||||
}
|
10
test/fixedbugs/issue5470.go
Normal file
10
test/fixedbugs/issue5470.go
Normal 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
|
Loading…
Reference in a new issue