| // 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" | 
 | } |