Commit c1fc8d52 authored by Rémy Oudompheng's avatar Rémy Oudompheng

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
parent 7a0dc1c9
......@@ -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:
......
// 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
}
}
// 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)
}
// 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment