From 43a274fd67747a70bb7c2f97db219f5d9ee8c07c Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Wed, 30 Mar 2016 11:15:01 -0400 Subject: [PATCH] cmd/compile: include pkgPath on all struct types Fixes #15026. Change-Id: I61ed71152b99973270d79264d1e8f466f7343c02 Reviewed-on: https://go-review.googlesource.com/21286 Run-TryBot: David Crawshaw TryBot-Result: Gobot Gobot Reviewed-by: Ian Lance Taylor --- src/cmd/compile/internal/gc/reflect.go | 2 +- src/reflect/all_test.go | 27 ++++++++++++++++++++++++++ src/reflect/export_test.go | 5 +++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/reflect.go b/src/cmd/compile/internal/gc/reflect.go index da7bd56afe..4bad490a64 100644 --- a/src/cmd/compile/internal/gc/reflect.go +++ b/src/cmd/compile/internal/gc/reflect.go @@ -1277,7 +1277,7 @@ ok: } ot = dcommontype(s, ot, t) - var pkg *Pkg + pkg := localpkg if t.Sym != nil { pkg = t.Sym.Pkg } diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index ebd352ca46..0ce6588e98 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -2321,6 +2321,33 @@ func TestImportPath(t *testing.T) { } } +func TestFieldPkgPath(t *testing.T) { + typ := TypeOf(struct { + Exported string + unexported string + OtherPkgFields + }{}) + for _, test := range []struct { + index []int + pkgPath string + anonymous bool + }{ + {[]int{0}, "", false}, // Exported + {[]int{1}, "reflect_test", false}, // unexported + {[]int{2}, "", true}, // OtherPkgFields + {[]int{2, 0}, "", false}, // OtherExported + {[]int{2, 1}, "reflect", false}, // otherUnexported + } { + f := typ.FieldByIndex(test.index) + if got, want := f.PkgPath, test.pkgPath; got != want { + t.Errorf("Field(%d).PkgPath = %q, want %q", test.index, got, want) + } + if got, want := f.Anonymous, test.anonymous; got != want { + t.Errorf("Field(%d).Anonymous = %v, want %v", test.index, got, want) + } + } +} + func TestVariadicType(t *testing.T) { // Test example from Type documentation. var f func(x int, y ...float64) diff --git a/src/reflect/export_test.go b/src/reflect/export_test.go index 9db6967ffa..ddc64b46be 100644 --- a/src/reflect/export_test.go +++ b/src/reflect/export_test.go @@ -94,3 +94,8 @@ func FirstMethodNameBytes(t Type) *byte { } return m.name.bytes } + +type OtherPkgFields struct { + OtherExported int + otherUnexported int +} -- 2.48.1