// errorcheck | |
// Copyright 2014 The Go Authors. All rights reserved. | |
// Use of this source code is governed by a BSD-style | |
// license that can be found in the LICENSE file. | |
// Issue 9017: Method selector shouldn't automatically dereference a named pointer type. | |
package main | |
type T struct{ x int } | |
func (T) mT() {} | |
type S struct { | |
T | |
} | |
func (S) mS() {} | |
type P *S | |
type I interface { | |
mT() | |
} | |
func main() { | |
var s S | |
s.T.mT() | |
s.mT() // == s.T.mT() | |
var i I | |
_ = i | |
i = s.T | |
i = s | |
var ps = &s | |
ps.mS() | |
ps.T.mT() | |
ps.mT() // == ps.T.mT() | |
i = ps.T | |
i = ps | |
var p P = ps | |
(*p).mS() | |
p.mS() // ERROR "undefined" | |
i = *p | |
i = p // ERROR "cannot use|incompatible types" | |
p.T.mT() | |
p.mT() // ERROR "undefined" | |
i = p.T | |
i = p // ERROR "cannot use|incompatible types" | |
} |