| // Copyright 2018 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. |
| |
| // This file contains test cases for various forms of |
| // method receiver declarations, per the spec clarification |
| // https://golang.org/cl/142757. |
| |
| package issue28251 |
| |
| // test case from issue28251 |
| type T struct{} |
| |
| type T0 = *T |
| |
| func (T0) m() {} |
| |
| func _() { (&T{}).m() } |
| |
| // various alternative forms |
| type ( |
| T1 = (((T))) |
| ) |
| |
| func ((*(T1))) m1() {} |
| func _() { (T{}).m2() } |
| func _() { (&T{}).m2() } |
| |
| type ( |
| T2 = (((T3))) |
| T3 = T |
| ) |
| |
| func (T2) m2() {} |
| func _() { (T{}).m2() } |
| func _() { (&T{}).m2() } |
| |
| type ( |
| T4 = ((*(T5))) |
| T5 = T |
| ) |
| |
| func (T4) m4() {} |
| func _() { (T{}).m4 /* ERROR "cannot call pointer method m4 on T" */ () } |
| func _() { (&T{}).m4() } |
| |
| type ( |
| T6 = (((T7))) |
| T7 = (*(T8)) |
| T8 = T |
| ) |
| |
| func (T6) m6() {} |
| func _() { (T{}).m6 /* ERROR "cannot call pointer method m6 on T" */ () } |
| func _() { (&T{}).m6() } |
| |
| type ( |
| T9 = *T10 |
| T10 = *T11 |
| T11 = T |
| ) |
| |
| func (T9 /* ERROR invalid receiver \*\*T */ ) m9() {} |
| func _() { (T{}).m9 /* ERROR has no field or method m9 */ () } |
| func _() { (&T{}).m9 /* ERROR has no field or method m9 */ () } |