mirror of
https://github.com/golang/go
synced 2024-11-25 18:37:57 -07:00
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
This commit is contained in:
parent
7a0dc1c9ec
commit
c1fc8d5296
@ -161,6 +161,11 @@ reexportdep(Node *n)
|
|||||||
case OCONV:
|
case OCONV:
|
||||||
case OCONVIFACE:
|
case OCONVIFACE:
|
||||||
case OCONVNOP:
|
case OCONVNOP:
|
||||||
|
case ORUNESTR:
|
||||||
|
case OARRAYBYTESTR:
|
||||||
|
case OARRAYRUNESTR:
|
||||||
|
case OSTRARRAYBYTE:
|
||||||
|
case OSTRARRAYRUNE:
|
||||||
case ODOTTYPE:
|
case ODOTTYPE:
|
||||||
case ODOTTYPE2:
|
case ODOTTYPE2:
|
||||||
case OSTRUCTLIT:
|
case OSTRUCTLIT:
|
||||||
|
60
test/fixedbugs/issue5755.dir/a.go
Normal file
60
test/fixedbugs/issue5755.dir/a.go
Normal file
@ -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
|
||||||
|
}
|
||||||
|
}
|
23
test/fixedbugs/issue5755.dir/main.go
Normal file
23
test/fixedbugs/issue5755.dir/main.go
Normal file
@ -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)
|
||||||
|
}
|
10
test/fixedbugs/issue5755.go
Normal file
10
test/fixedbugs/issue5755.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 5755: exported data for inlining may miss
|
||||||
|
// named types when used in string conversions.
|
||||||
|
|
||||||
|
package ignored
|
Loading…
Reference in New Issue
Block a user