From e33810b29189e2a470e7003b0a519b624eedb651 Mon Sep 17 00:00:00 2001 From: Andrew Gerrand Date: Mon, 22 Jul 2013 18:34:36 +1000 Subject: [release-branch.go1.1] cmd/gc: fix missing export data for inlining in a few other cases. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ««« CL 10464043 / c224c549a3c7 cmd/gc: fix missing export data for inlining in a few other cases. Exported inlined functions that perform a string conversion using a non-exported named type may miss it in export data. Fixes #5755. R=rsc, golang-dev, ality, r CC=golang-dev https://golang.org/cl/10464043 »»» Update #5928 R=golang-dev, dave CC=golang-dev https://golang.org/cl/11629044 --- src/cmd/gc/export.c | 5 +++ test/fixedbugs/issue5755.dir/a.go | 60 ++++++++++++++++++++++++++++++++++++ test/fixedbugs/issue5755.dir/main.go | 23 ++++++++++++++ test/fixedbugs/issue5755.go | 10 ++++++ 4 files changed, 98 insertions(+) create mode 100644 test/fixedbugs/issue5755.dir/a.go create mode 100644 test/fixedbugs/issue5755.dir/main.go create mode 100644 test/fixedbugs/issue5755.go diff --git a/src/cmd/gc/export.c b/src/cmd/gc/export.c index 4a9b8c8ba3..caac330d52 100644 --- a/src/cmd/gc/export.c +++ b/src/cmd/gc/export.c @@ -161,6 +161,11 @@ reexportdep(Node *n) case OCONV: case OCONVIFACE: case OCONVNOP: + case ORUNESTR: + case OARRAYBYTESTR: + case OARRAYRUNESTR: + case OSTRARRAYBYTE: + case OSTRARRAYRUNE: case ODOTTYPE: case ODOTTYPE2: case OSTRUCTLIT: diff --git a/test/fixedbugs/issue5755.dir/a.go b/test/fixedbugs/issue5755.dir/a.go new file mode 100644 index 0000000000..aa398e82b2 --- /dev/null +++ b/test/fixedbugs/issue5755.dir/a.go @@ -0,0 +1,60 @@ +// 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 I interface { + F() +} + +type foo1 []byte +type foo2 []rune +type foo3 []uint8 +type foo4 []int32 +type foo5 string +type foo6 string +type foo7 string +type foo8 string +type foo9 string + +func (f foo1) F() { return } +func (f foo2) F() { return } +func (f foo3) F() { return } +func (f foo4) F() { return } +func (f foo5) F() { return } +func (f foo6) F() { return } +func (f foo7) F() { return } +func (f foo8) F() { return } +func (f foo9) F() { return } + +func Test1(s string) I { return foo1(s) } +func Test2(s string) I { return foo2(s) } +func Test3(s string) I { return foo3(s) } +func Test4(s string) I { return foo4(s) } +func Test5(s []byte) I { return foo5(s) } +func Test6(s []rune) I { return foo6(s) } +func Test7(s []uint8) I { return foo7(s) } +func Test8(s []int32) I { return foo8(s) } +func Test9(s int) I { return foo9(s) } + +type bar map[int]int + +func (b bar) F() { return } + +func TestBar() I { return bar{1: 2} } + +type baz int + +func IsBaz(x interface{}) bool { _, ok := x.(baz); return ok } + +type baz2 int + +func IsBaz2(x interface{}) bool { + switch x.(type) { + case baz2: + return true + default: + return false + } +} diff --git a/test/fixedbugs/issue5755.dir/main.go b/test/fixedbugs/issue5755.dir/main.go new file mode 100644 index 0000000000..6d515f26a6 --- /dev/null +++ b/test/fixedbugs/issue5755.dir/main.go @@ -0,0 +1,23 @@ +// 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 main + +import "./a" + +func main() { + a.Test1("frumious") + a.Test2("frumious") + a.Test3("frumious") + a.Test4("frumious") + + a.Test5(nil) + a.Test6(nil) + a.Test7(nil) + a.Test8(nil) + a.Test9(0) + + a.TestBar() + a.IsBaz(nil) +} diff --git a/test/fixedbugs/issue5755.go b/test/fixedbugs/issue5755.go new file mode 100644 index 0000000000..fa7ea4d204 --- /dev/null +++ b/test/fixedbugs/issue5755.go @@ -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 5755: exported data for inlining may miss +// named types when used in string conversions. + +package ignored -- cgit v1.2.3-54-g00ecf