1// errorcheck 2 3// Copyright 2009 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// Verify that pointers and interface types cannot be method receivers. 8// Does not compile. 9 10package main 11 12type T struct { 13 a int 14} 15type P *T 16type P1 *T 17 18func (p P) val() int { return 1 } // ERROR "receiver.* pointer|invalid pointer or interface receiver|invalid receiver" 19func (p *P1) val() int { return 1 } // ERROR "receiver.* pointer|invalid pointer or interface receiver|invalid receiver" 20 21type I interface{} 22type I1 interface{} 23 24func (p I) val() int { return 1 } // ERROR "receiver.*interface|invalid pointer or interface receiver" 25func (p *I1) val() int { return 1 } // ERROR "receiver.*interface|invalid pointer or interface receiver" 26 27type Val interface { 28 val() int 29} 30 31var _ = (*Val).val // ERROR "method|type \*Val is pointer to interface, not interface" 32 33var v Val 34var pv = &v 35 36var _ = pv.val() // ERROR "undefined|pointer to interface" 37var _ = pv.val // ERROR "undefined|pointer to interface" 38 39func (t *T) g() int { return t.a } 40 41var _ = (T).g() // ERROR "needs pointer receiver|undefined|method requires pointer|cannot call pointer method" 42