1// errorcheck 2 3// Copyright 2014 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7// Issue 9017: Method selector shouldn't automatically dereference a named pointer type. 8 9package main 10 11type T struct{ x int } 12 13func (T) mT() {} 14 15type S struct { 16 T 17} 18 19func (S) mS() {} 20 21type P *S 22 23type I interface { 24 mT() 25} 26 27func main() { 28 var s S 29 s.T.mT() 30 s.mT() // == s.T.mT() 31 32 var i I 33 _ = i 34 i = s.T 35 i = s 36 37 var ps = &s 38 ps.mS() 39 ps.T.mT() 40 ps.mT() // == ps.T.mT() 41 42 i = ps.T 43 i = ps 44 45 var p P = ps 46 (*p).mS() 47 p.mS() // ERROR "undefined" 48 49 i = *p 50 i = p // ERROR "cannot use|incompatible types" 51 52 p.T.mT() 53 p.mT() // ERROR "undefined" 54 55 i = p.T 56 i = p // ERROR "cannot use|incompatible types" 57} 58