diff --git a/.github/workflows/test_demo.sh b/.github/workflows/test_demo.sh index a4f1be84f5..e82548f322 100755 --- a/.github/workflows/test_demo.sh +++ b/.github/workflows/test_demo.sh @@ -102,6 +102,7 @@ ignore_esp32=( "./_demo/go/randcrypt" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/randdemo" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/readdir" # panic: internal/bytealg selected .s files require plan9asm translation + "./_demo/go/reflectchanof" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectconv" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectcopy" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectempty" # panic: internal/bytealg selected .s files require plan9asm translation @@ -182,6 +183,7 @@ ignore_esp32c3_basic=( "./_demo/go/randcrypt" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/randdemo" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/readdir" # panic: internal/bytealg selected .s files require plan9asm translation + "./_demo/go/reflectchanof" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectconv" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectfunc" # panic: internal/bytealg selected .s files require plan9asm translation "./_demo/go/reflectfnconv" # panic: internal/bytealg selected .s files require plan9asm translation diff --git a/_demo/go/reflectchanof/main.go b/_demo/go/reflectchanof/main.go new file mode 100644 index 0000000000..a092e8571e --- /dev/null +++ b/_demo/go/reflectchanof/main.go @@ -0,0 +1,15 @@ +package main + +import ( + "reflect" +) + +type T struct{} + +func main() { + ch := reflect.ChanOf(reflect.BothDir, reflect.TypeOf(T{})) + ptr := reflect.PointerTo(ch) + if ptr.Elem() != ch { + panic("error " + ptr.String()) + } +} diff --git a/runtime/internal/lib/reflect/type.go b/runtime/internal/lib/reflect/type.go index 2ed4b40e93..b311b5f626 100644 --- a/runtime/internal/lib/reflect/type.go +++ b/runtime/internal/lib/reflect/type.go @@ -1312,6 +1312,7 @@ func ChanOf(dir ChanDir, t Type) Type { ch.Str_ = s ch.Hash = fnv1(typ.Hash, 'c', byte(dir)) ch.Elem = typ + ch.PtrToThis_ = nil ti, _ := lookupCache.LoadOrStore(ckey, toRType(&ch.Type)) return ti.(Type)