1// errorcheck 2 3// Copyright 2020 The Go Authors. All rights reserved. Use of this 4// source code is governed by a BSD-style license that can be found in 5// the LICENSE file. 6 7package p 8 9type T int 10 11func (T) Mv() {} 12func (*T) Mp() {} 13 14type P1 struct{ T } 15type P2 struct{ *T } 16type P3 *struct{ T } 17type P4 *struct{ *T } 18 19func _() { 20 { 21 var p P1 22 p.Mv() 23 (&p).Mv() 24 (*&p).Mv() 25 p.Mp() 26 (&p).Mp() 27 (*&p).Mp() 28 } 29 { 30 var p P2 31 p.Mv() 32 (&p).Mv() 33 (*&p).Mv() 34 p.Mp() 35 (&p).Mp() 36 (*&p).Mp() 37 } 38 { 39 var p P3 40 p.Mv() // ERROR "undefined" 41 (&p).Mv() // ERROR "undefined" 42 (*&p).Mv() // ERROR "undefined" 43 (**&p).Mv() 44 (*p).Mv() 45 (&*p).Mv() 46 p.Mp() // ERROR "undefined" 47 (&p).Mp() // ERROR "undefined" 48 (*&p).Mp() // ERROR "undefined" 49 (**&p).Mp() 50 (*p).Mp() 51 (&*p).Mp() 52 } 53 { 54 var p P4 55 p.Mv() // ERROR "undefined" 56 (&p).Mv() // ERROR "undefined" 57 (*&p).Mv() // ERROR "undefined" 58 (**&p).Mv() 59 (*p).Mv() 60 (&*p).Mv() 61 p.Mp() // ERROR "undefined" 62 (&p).Mp() // ERROR "undefined" 63 (*&p).Mp() // ERROR "undefined" 64 (**&p).Mp() 65 (*p).Mp() 66 (&*p).Mp() 67 } 68} 69 70func _() { 71 type P5 struct{ T } 72 type P6 struct{ *T } 73 type P7 *struct{ T } 74 type P8 *struct{ *T } 75 76 { 77 var p P5 78 p.Mv() 79 (&p).Mv() 80 (*&p).Mv() 81 p.Mp() 82 (&p).Mp() 83 (*&p).Mp() 84 } 85 { 86 var p P6 87 p.Mv() 88 (&p).Mv() 89 (*&p).Mv() 90 p.Mp() 91 (&p).Mp() 92 (*&p).Mp() 93 } 94 { 95 var p P7 96 p.Mv() // ERROR "undefined" 97 (&p).Mv() // ERROR "undefined" 98 (*&p).Mv() // ERROR "undefined" 99 (**&p).Mv() 100 (*p).Mv() 101 (&*p).Mv() 102 p.Mp() // ERROR "undefined" 103 (&p).Mp() // ERROR "undefined" 104 (*&p).Mp() // ERROR "undefined" 105 (**&p).Mp() 106 (*p).Mp() 107 (&*p).Mp() 108 } 109 { 110 var p P8 111 p.Mv() // ERROR "undefined" 112 (&p).Mv() // ERROR "undefined" 113 (*&p).Mv() // ERROR "undefined" 114 (**&p).Mv() 115 (*p).Mv() 116 (&*p).Mv() 117 p.Mp() // ERROR "undefined" 118 (&p).Mp() // ERROR "undefined" 119 (*&p).Mp() // ERROR "undefined" 120 (**&p).Mp() 121 (*p).Mp() 122 (&*p).Mp() 123 } 124} 125