--- /dev/null
+package pkg
+
+import (
+ "encoding/json"
+ "encoding/xml"
+)
+
+type T1 struct {
+ A int
+ B func() `json:"-" xml:"-"`
+ c chan int
+}
+
+type T2 struct {
+ T1
+}
+
+type T3 struct {
+ C chan int
+}
+
+type T4 struct {
+ C C
+}
+
+type T5 struct {
+ B func() `xml:"-"`
+}
+
+type T6 struct {
+ B func() `json:"-"`
+}
+
+type T7 struct {
+ A int
+ B int
+ T3
+}
+
+type T8 struct {
+ C int
+ *T7
+}
+
+type C chan int
+
+func (C) MarshalText() ([]byte, error) { return nil, nil }
+
+func fn() {
+ var t1 T1
+ var t2 T2
+ var t3 T3
+ var t4 T4
+ var t5 T5
+ var t6 T6
+ var t8 T8
+ json.Marshal(t1)
+ json.Marshal(t2)
+ json.Marshal(t3) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T3\.C`
+ json.Marshal(t4)
+ json.Marshal(t5) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T5\.B`
+ json.Marshal(t6)
+ (*json.Encoder)(nil).Encode(t1)
+ (*json.Encoder)(nil).Encode(t2)
+ (*json.Encoder)(nil).Encode(t3) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T3\.C`
+ (*json.Encoder)(nil).Encode(t4)
+ (*json.Encoder)(nil).Encode(t5) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T5\.B`
+ (*json.Encoder)(nil).Encode(t6)
+
+ xml.Marshal(t1)
+ xml.Marshal(t2)
+ xml.Marshal(t3) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T3\.C`
+ xml.Marshal(t4)
+ xml.Marshal(t5)
+ xml.Marshal(t6) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T6\.B`
+ (*xml.Encoder)(nil).Encode(t1)
+ (*xml.Encoder)(nil).Encode(t2)
+ (*xml.Encoder)(nil).Encode(t3) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T3\.C`
+ (*xml.Encoder)(nil).Encode(t4)
+ (*xml.Encoder)(nil).Encode(t5)
+ (*xml.Encoder)(nil).Encode(t6) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T6\.B`
+
+ json.Marshal(t8) // want `trying to marshal chan or func value, field CheckUnsupportedMarshal\.T8\.T7\.T3\.C`
+}