Home | History | Annotate | Download | only in test
      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 assignment rules are enforced by the compiler.
      8 // Does not compile.
      9 
     10 package main
     11 
     12 type (
     13 	A [10]int
     14 	B []int
     15 	C chan int
     16 	F func() int
     17 	I interface {
     18 		m() int
     19 	}
     20 	M map[int]int
     21 	P *int
     22 	S struct {
     23 		X int
     24 	}
     25 
     26 	A1 [10]int
     27 	B1 []int
     28 	C1 chan int
     29 	F1 func() int
     30 	I1 interface {
     31 		m() int
     32 	}
     33 	M1 map[int]int
     34 	P1 *int
     35 	S1 struct {
     36 		X int
     37 	}
     38 )
     39 
     40 var (
     41 	a0 [10]int
     42 	b0 []int
     43 	c0 chan int
     44 	f0 func() int
     45 	i0 interface {
     46 		m() int
     47 	}
     48 	m0 map[int]int
     49 	p0 *int
     50 	s0 struct {
     51 		X int
     52 	}
     53 
     54 	a A
     55 	b B
     56 	c C
     57 	f F
     58 	i I
     59 	m M
     60 	p P
     61 	s S
     62 
     63 	a1 A1
     64 	b1 B1
     65 	c1 C1
     66 	f1 F1
     67 	i1 I1
     68 	m1 M1
     69 	p1 P1
     70 	s1 S1
     71 
     72 	pa0 *[10]int
     73 	pb0 *[]int
     74 	pc0 *chan int
     75 	pf0 *func() int
     76 	pi0 *interface {
     77 		m() int
     78 	}
     79 	pm0 *map[int]int
     80 	pp0 **int
     81 	ps0 *struct {
     82 		X int
     83 	}
     84 
     85 	pa *A
     86 	pb *B
     87 	pc *C
     88 	pf *F
     89 	pi *I
     90 	pm *M
     91 	pp *P
     92 	ps *S
     93 
     94 	pa1 *A1
     95 	pb1 *B1
     96 	pc1 *C1
     97 	pf1 *F1
     98 	pi1 *I1
     99 	pm1 *M1
    100 	pp1 *P1
    101 	ps1 *S1
    102 )
    103 
    104 func main() {
    105 	a0 = a
    106 	a0 = a1
    107 	a = a0
    108 	a = a1 // ERROR "cannot use"
    109 	a1 = a0
    110 	a1 = a // ERROR "cannot use"
    111 
    112 	b0 = b
    113 	b0 = b1
    114 	b = b0
    115 	b = b1 // ERROR "cannot use"
    116 	b1 = b0
    117 	b1 = b // ERROR "cannot use"
    118 
    119 	c0 = c
    120 	c0 = c1
    121 	c = c0
    122 	c = c1 // ERROR "cannot use"
    123 	c1 = c0
    124 	c1 = c // ERROR "cannot use"
    125 
    126 	f0 = f
    127 	f0 = f1
    128 	f = f0
    129 	f = f1 // ERROR "cannot use"
    130 	f1 = f0
    131 	f1 = f // ERROR "cannot use"
    132 
    133 	i0 = i
    134 	i0 = i1
    135 	i = i0
    136 	i = i1
    137 	i1 = i0
    138 	i1 = i
    139 
    140 	m0 = m
    141 	m0 = m1
    142 	m = m0
    143 	m = m1 // ERROR "cannot use"
    144 	m1 = m0
    145 	m1 = m // ERROR "cannot use"
    146 
    147 	p0 = p
    148 	p0 = p1
    149 	p = p0
    150 	p = p1 // ERROR "cannot use"
    151 	p1 = p0
    152 	p1 = p // ERROR "cannot use"
    153 
    154 	s0 = s
    155 	s0 = s1
    156 	s = s0
    157 	s = s1 // ERROR "cannot use"
    158 	s1 = s0
    159 	s1 = s // ERROR "cannot use"
    160 
    161 	pa0 = pa  // ERROR "cannot use|incompatible"
    162 	pa0 = pa1 // ERROR "cannot use|incompatible"
    163 	pa = pa0  // ERROR "cannot use|incompatible"
    164 	pa = pa1  // ERROR "cannot use|incompatible"
    165 	pa1 = pa0 // ERROR "cannot use|incompatible"
    166 	pa1 = pa  // ERROR "cannot use|incompatible"
    167 
    168 	pb0 = pb  // ERROR "cannot use|incompatible"
    169 	pb0 = pb1 // ERROR "cannot use|incompatible"
    170 	pb = pb0  // ERROR "cannot use|incompatible"
    171 	pb = pb1  // ERROR "cannot use|incompatible"
    172 	pb1 = pb0 // ERROR "cannot use|incompatible"
    173 	pb1 = pb  // ERROR "cannot use|incompatible"
    174 
    175 	pc0 = pc  // ERROR "cannot use|incompatible"
    176 	pc0 = pc1 // ERROR "cannot use|incompatible"
    177 	pc = pc0  // ERROR "cannot use|incompatible"
    178 	pc = pc1  // ERROR "cannot use|incompatible"
    179 	pc1 = pc0 // ERROR "cannot use|incompatible"
    180 	pc1 = pc  // ERROR "cannot use|incompatible"
    181 
    182 	pf0 = pf  // ERROR "cannot use|incompatible"
    183 	pf0 = pf1 // ERROR "cannot use|incompatible"
    184 	pf = pf0  // ERROR "cannot use|incompatible"
    185 	pf = pf1  // ERROR "cannot use|incompatible"
    186 	pf1 = pf0 // ERROR "cannot use|incompatible"
    187 	pf1 = pf  // ERROR "cannot use|incompatible"
    188 
    189 	pi0 = pi  // ERROR "cannot use|incompatible"
    190 	pi0 = pi1 // ERROR "cannot use|incompatible"
    191 	pi = pi0  // ERROR "cannot use|incompatible"
    192 	pi = pi1  // ERROR "cannot use|incompatible"
    193 	pi1 = pi0 // ERROR "cannot use|incompatible"
    194 	pi1 = pi  // ERROR "cannot use|incompatible"
    195 
    196 	pm0 = pm  // ERROR "cannot use|incompatible"
    197 	pm0 = pm1 // ERROR "cannot use|incompatible"
    198 	pm = pm0  // ERROR "cannot use|incompatible"
    199 	pm = pm1  // ERROR "cannot use|incompatible"
    200 	pm1 = pm0 // ERROR "cannot use|incompatible"
    201 	pm1 = pm  // ERROR "cannot use|incompatible"
    202 
    203 	pp0 = pp  // ERROR "cannot use|incompatible"
    204 	pp0 = pp1 // ERROR "cannot use|incompatible"
    205 	pp = pp0  // ERROR "cannot use|incompatible"
    206 	pp = pp1  // ERROR "cannot use|incompatible"
    207 	pp1 = pp0 // ERROR "cannot use|incompatible"
    208 	pp1 = pp  // ERROR "cannot use|incompatible"
    209 
    210 	ps0 = ps  // ERROR "cannot use|incompatible"
    211 	ps0 = ps1 // ERROR "cannot use|incompatible"
    212 	ps = ps0  // ERROR "cannot use|incompatible"
    213 	ps = ps1  // ERROR "cannot use|incompatible"
    214 	ps1 = ps0 // ERROR "cannot use|incompatible"
    215 	ps1 = ps  // ERROR "cannot use|incompatible"
    216 
    217 
    218 	a0 = [10]int(a)
    219 	a0 = [10]int(a1)
    220 	a = A(a0)
    221 	a = A(a1)
    222 	a1 = A1(a0)
    223 	a1 = A1(a)
    224 
    225 	b0 = []int(b)
    226 	b0 = []int(b1)
    227 	b = B(b0)
    228 	b = B(b1)
    229 	b1 = B1(b0)
    230 	b1 = B1(b)
    231 
    232 	c0 = chan int(c)
    233 	c0 = chan int(c1)
    234 	c = C(c0)
    235 	c = C(c1)
    236 	c1 = C1(c0)
    237 	c1 = C1(c)
    238 
    239 	f0 = func() int(f)
    240 	f0 = func() int(f1)
    241 	f = F(f0)
    242 	f = F(f1)
    243 	f1 = F1(f0)
    244 	f1 = F1(f)
    245 
    246 	i0 = interface {
    247 		m() int
    248 	}(i)
    249 	i0 = interface {
    250 		m() int
    251 	}(i1)
    252 	i = I(i0)
    253 	i = I(i1)
    254 	i1 = I1(i0)
    255 	i1 = I1(i)
    256 
    257 	m0 = map[int]int(m)
    258 	m0 = map[int]int(m1)
    259 	m = M(m0)
    260 	m = M(m1)
    261 	m1 = M1(m0)
    262 	m1 = M1(m)
    263 
    264 	p0 = (*int)(p)
    265 	p0 = (*int)(p1)
    266 	p = P(p0)
    267 	p = P(p1)
    268 	p1 = P1(p0)
    269 	p1 = P1(p)
    270 
    271 	s0 = struct {
    272 		X int
    273 	}(s)
    274 	s0 = struct {
    275 		X int
    276 	}(s1)
    277 	s = S(s0)
    278 	s = S(s1)
    279 	s1 = S1(s0)
    280 	s1 = S1(s)
    281 
    282 	pa0 = (*[10]int)(pa)
    283 	pa0 = (*[10]int)(pa1)
    284 	pa = (*A)(pa0)
    285 	pa = (*A)(pa1)
    286 	pa1 = (*A1)(pa0)
    287 	pa1 = (*A1)(pa)
    288 
    289 	pb0 = (*[]int)(pb)
    290 	pb0 = (*[]int)(pb1)
    291 	pb = (*B)(pb0)
    292 	pb = (*B)(pb1)
    293 	pb1 = (*B1)(pb0)
    294 	pb1 = (*B1)(pb)
    295 
    296 	pc0 = (*chan int)(pc)
    297 	pc0 = (*chan int)(pc1)
    298 	pc = (*C)(pc0)
    299 	pc = (*C)(pc1)
    300 	pc1 = (*C1)(pc0)
    301 	pc1 = (*C1)(pc)
    302 
    303 	pf0 = (*func() int)(pf)
    304 	pf0 = (*func() int)(pf1)
    305 	pf = (*F)(pf0)
    306 	pf = (*F)(pf1)
    307 	pf1 = (*F1)(pf0)
    308 	pf1 = (*F1)(pf)
    309 
    310 	pi0 = (*interface {
    311 		m() int
    312 	})(pi)
    313 	pi0 = (*interface {
    314 		m() int
    315 	})(pi1)
    316 	pi = (*I)(pi0)
    317 	pi = (*I)(pi1)
    318 	pi1 = (*I1)(pi0)
    319 	pi1 = (*I1)(pi)
    320 
    321 	pm0 = (*map[int]int)(pm)
    322 	pm0 = (*map[int]int)(pm1)
    323 	pm = (*M)(pm0)
    324 	pm = (*M)(pm1)
    325 	pm1 = (*M1)(pm0)
    326 	pm1 = (*M1)(pm)
    327 
    328 	pp0 = (**int)(pp)
    329 	pp0 = (**int)(pp1)
    330 	pp = (*P)(pp0)
    331 	pp = (*P)(pp1)
    332 	pp1 = (*P1)(pp0)
    333 	pp1 = (*P1)(pp)
    334 
    335 	ps0 = (*struct {
    336 		X int
    337 	})(ps)
    338 	ps0 = (*struct {
    339 		X int
    340 	})(ps1)
    341 	ps = (*S)(ps0)
    342 	ps = (*S)(ps1)
    343 	ps1 = (*S1)(ps0)
    344 	ps1 = (*S1)(ps)
    345 
    346 }
    347