sname += "-noname-unexported." + tag
}
} else {
- sname += name + "." + tag
+ if exported {
+ sname += name + "." + tag
+ } else {
+ sname += name + "-" + tag
+ }
}
} else {
sname = fmt.Sprintf(`%s"".%d`, sname, dnameCount)
--- /dev/null
+// Copyright 2017 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 S struct {
+ x int
+}
+
+func V() interface{} {
+ return S{0}
+}
--- /dev/null
+// Copyright 2017 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 "reflect"
+
+type X int
+
+func F1() string {
+ type x X
+
+ s := struct {
+ *x
+ }{nil}
+ v := reflect.TypeOf(s)
+ return v.Field(0).PkgPath
+}
+
+func F2() string {
+ type y X
+
+ s := struct {
+ *y
+ }{nil}
+ v := reflect.TypeOf(s)
+ return v.Field(0).PkgPath
+}
--- /dev/null
+// Copyright 2017 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 (
+ "fmt"
+ "os"
+
+ "./a"
+ "./b"
+)
+
+func main() {
+ // Make sure the reflect information for a.S is in the executable.
+ _ = a.V()
+
+ b1 := b.F1()
+ b2 := b.F2()
+ if b1 != b2 {
+ fmt.Printf("%q (from b.F1()) != %q (from b.F2())\n", b1, b2)
+ os.Exit(1)
+ }
+}
--- /dev/null
+// rundir
+
+// Copyright 2017 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.
+
+// The compiler was using an incomplete symbol name for reflect name data,
+// permitting an invalid merge in the linker, producing an incorrect
+// exported flag bit.
+
+package ignored