aboutsummaryrefslogtreecommitdiff
path: root/src/go/types/struct.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/go/types/struct.go')
-rw-r--r--src/go/types/struct.go10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/go/types/struct.go b/src/go/types/struct.go
index d1fb813c14..48b07346dc 100644
--- a/src/go/types/struct.go
+++ b/src/go/types/struct.go
@@ -136,7 +136,7 @@ func (check *Checker) structType(styp *Struct, e *ast.StructType) {
check.later(func() {
t, isPtr := deref(embeddedTyp)
- switch t := optype(t).(type) {
+ switch t := under(t).(type) {
case *Basic:
if t == Typ[Invalid] {
// error was reported before
@@ -144,13 +144,15 @@ func (check *Checker) structType(styp *Struct, e *ast.StructType) {
}
// unsafe.Pointer is treated like a regular pointer
if t.kind == UnsafePointer {
- check.errorf(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be unsafe.Pointer")
+ check.error(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be unsafe.Pointer")
}
case *Pointer:
- check.errorf(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be a pointer")
+ check.error(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be a pointer")
+ case *TypeParam:
+ check.error(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be a (pointer to a) type parameter")
case *Interface:
if isPtr {
- check.errorf(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be a pointer to an interface")
+ check.error(embeddedPos, _InvalidPtrEmbed, "embedded field type cannot be a pointer to an interface")
}
}
})