aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2012-09-22 05:54:58 +1000
committerRuss Cox <rsc@golang.org>2012-09-22 05:54:58 +1000
commite26dc4a8d8c3aa3db09d90bd386a7b3cdae024f2 (patch)
tree454224f50c37aef8e0f2f34bb5b9c47f406c3009
parente302bba792acbc8685ee411a9412cef2096310b1 (diff)
downloadgo-e26dc4a8d8c3aa3db09d90bd386a7b3cdae024f2.tar.gz
go-e26dc4a8d8c3aa3db09d90bd386a7b3cdae024f2.zip
[release-branch.go1] cmd/gc: fix PkgPath of byte, rune types
««« backport 272e1dd72156 cmd/gc: fix PkgPath of byte, rune types Fixes #3853. R=ken2 CC=golang-dev https://golang.org/cl/6492071 »»»
-rw-r--r--src/cmd/gc/reflect.c6
-rw-r--r--src/pkg/reflect/all_test.go23
2 files changed, 29 insertions, 0 deletions
diff --git a/src/cmd/gc/reflect.c b/src/cmd/gc/reflect.c
index f77697a6b8..39f6598199 100644
--- a/src/cmd/gc/reflect.c
+++ b/src/cmd/gc/reflect.c
@@ -672,6 +672,12 @@ dtypesym(Type *t)
Sig *a, *m;
Type *t1, *tbase, *t2;
+ // Replace byte, rune aliases with real type.
+ // They've been separate internally to make error messages
+ // better, but we have to merge them in the reflect tables.
+ if(t == bytetype || t == runetype)
+ t = types[t->etype];
+
if(isideal(t))
fatal("dtypesym %T", t);
diff --git a/src/pkg/reflect/all_test.go b/src/pkg/reflect/all_test.go
index e331405635..a0b9a03eb5 100644
--- a/src/pkg/reflect/all_test.go
+++ b/src/pkg/reflect/all_test.go
@@ -1384,7 +1384,30 @@ func TestImportPath(t *testing.T) {
path string
}{
{TypeOf(&base64.Encoding{}).Elem(), "encoding/base64"},
+ {TypeOf(int(0)), ""},
+ {TypeOf(int8(0)), ""},
+ {TypeOf(int16(0)), ""},
+ {TypeOf(int32(0)), ""},
+ {TypeOf(int64(0)), ""},
{TypeOf(uint(0)), ""},
+ {TypeOf(uint8(0)), ""},
+ {TypeOf(uint16(0)), ""},
+ {TypeOf(uint32(0)), ""},
+ {TypeOf(uint64(0)), ""},
+ {TypeOf(uintptr(0)), ""},
+ {TypeOf(float32(0)), ""},
+ {TypeOf(float64(0)), ""},
+ {TypeOf(complex64(0)), ""},
+ {TypeOf(complex128(0)), ""},
+ {TypeOf(byte(0)), ""},
+ {TypeOf(rune(0)), ""},
+ {TypeOf([]byte(nil)), ""},
+ {TypeOf([]rune(nil)), ""},
+ {TypeOf(string("")), ""},
+ {TypeOf((*interface{})(nil)).Elem(), ""},
+ {TypeOf((*byte)(nil)), ""},
+ {TypeOf((*rune)(nil)), ""},
+ {TypeOf((*int64)(nil)), ""},
{TypeOf(map[string]int{}), ""},
{TypeOf((*error)(nil)).Elem(), ""},
}