0
1
mirror of https://github.com/golang/go synced 2025-04-29 02:27:46 +00:00
Files
.github
api
doc
lib
misc
src
test
abi
alias3.dir
asmhdr.dir
bench
chan
closure3.dir
closure5.dir
codegen
ddd2.dir
dwarf
fixedbugs
import2.dir
import4.dir
interface
intrinsic.dir
ken
linkname.dir
method4.dir
retjmp.dir
runtime
stress
syntax
typeparam
uintptrescapes.dir
235.go
64bit.go
README.md
alg.go
alias.go
alias1.go
alias2.go
alias3.go
align.go
append.go
append1.go
args.go
armimm.go
asmhdr.go
assign.go
assign1.go
atomicload.go
bigalg.go
bigmap.go
blank.go
blank1.go
bom.go
bombad.go
bounds.go
cannotassign.go
chancap.go
chanlinear.go
char_lit.go
char_lit1.go
checkbce.go
clearfat.go
closedchan.go
closure.go
closure1.go
closure2.go
closure3.go
closure4.go
closure5.go
closure6.go
closure7.go
cmp.go
cmp6.go
cmplx.go
cmplxdivide.c
cmplxdivide.go
cmplxdivide1.go
complit.go
complit1.go
compos.go
const.go
const1.go
const2.go
const3.go
const4.go
const5.go
const6.go
const7.go
const8.go
convT2X.go
convert.go
convert1.go
convert2.go
convert3.go
convert4.go
convinline.go
convlit.go
convlit1.go
copy.go
copy1.go
crlf.go
ddd.go
ddd1.go
ddd2.go
decl.go
declbad.go
defer.go
defererrcheck.go
deferfin.go
defernil.go
deferprint.go
deferprint.out
devirt.go
directive.go
directive2.go
divide.go
divmod.go
embedfunc.go
embedvers.go
empty.go
env.go
eof.go
eof1.go
escape.go
escape2.go
escape2n.go
escape3.go
escape4.go
escape5.go
escape_array.go
escape_calls.go
escape_closure.go
escape_field.go
escape_goto.go
escape_hash_maphash.go
escape_iface.go
escape_iface_nounified.go
escape_iface_unified.go
escape_indir.go
escape_level.go
escape_map.go
escape_param.go
escape_runtime_atomic.go
escape_selfassign.go
escape_slice.go
escape_struct_param1.go
escape_struct_param2.go
escape_struct_return.go
escape_sync_atomic.go
escape_unsafe.go
fibo.go
finprofiled.go
float_lit.go
float_lit2.go
float_lit3.go
floatcmp.go
for.go
func.go
func1.go
func2.go
func3.go
func4.go
func5.go
func6.go
func7.go
func8.go
funcdup.go
funcdup2.go
fuse.go
gc.go
gc1.go
gc2.go
gcgort.go
gcstring.go
goprint.go
goprint.out
goto.go
heapsampling.go
helloworld.go
helloworld.out
if.go
import.go
import1.go
import2.go
import4.go
import5.go
import6.go
index.go
index0.go
index1.go
index2.go
indirect.go
indirect1.go
init.go
init1.go
initcomma.go
initexp.go
initialize.go
initializerr.go
initloop.go
inline.go
inline_big.go
inline_caller.go
inline_callers.go
inline_endian.go
inline_literal.go
inline_math_bits_rotate.go
inline_nounified.go
inline_sync.go
inline_unified.go
inline_variadic.go
int_lit.go
intcvt.go
intrinsic.go
intrinsic_atomic.go
iota.go
label.go
label1.go
linkmain.go
linkmain_run.go
linkname.go
linkname3.go
linkobj.go
linkx.go
linkx_run.go
literal.go
literal2.go
live.go
live1.go
live2.go
live_regabi.go
live_uintptrkeepalive.go
loopbce.go
mainsig.go
makechan.go
makemap.go
makenew.go
makeslice.go
mallocfin.go
map.go
map1.go
mapclear.go
maplinear.go
maymorestack.go
mergemul.go
method.go
method1.go
method2.go
method3.go
method4.go
method5.go
method6.go
method7.go
named.go
named1.go
nil.go
nilcheck.go
nilptr.go
nilptr2.go
nilptr3.go
nilptr4.go
nilptr5.go
nilptr5_aix.go
nilptr5_wasm.go
nilptr_aix.go
noinit.go
nosplit.go
nowritebarrier.go
nul1.go
opt_branchlikely.go
parentype.go
peano.go
phiopt.go
print.go
print.out
printbig.go
printbig.out
prove.go
prove_constant_folding.go
range.go
recover.go
recover1.go
recover2.go
recover3.go
recover4.go
recover5.go
reflectmethod1.go
reflectmethod2.go
reflectmethod3.go
reflectmethod4.go
reflectmethod5.go
reflectmethod6.go
reflectmethod7.go
reflectmethod8.go
rename.go
rename1.go
reorder.go
reorder2.go
retjmp.go
return.go
rotate.go
rotate0.go
rotate1.go
rotate2.go
rotate3.go
run.go
rune.go
runtime.go
shift1.go
shift2.go
shift3.go
sieve.go
sigchld.go
sigchld.out
simassign.go
sizeof.go
slice3.go
slice3err.go
slicecap.go
sliceopt.go
solitaire.go
stack.go
stackobj.go
stackobj2.go
stackobj3.go
strcopy.go
strength.go
string_lit.go
stringrange.go
struct0.go
switch.go
switch2.go
switch3.go
switch4.go
switch5.go
switch6.go
switch7.go
tinyfin.go
torture.go
turing.go
typecheck.go
typecheckloop.go
typeswitch.go
typeswitch1.go
typeswitch2.go
typeswitch2b.go
typeswitch3.go
uintptrescapes.go
uintptrescapes2.go
uintptrescapes3.go
uintptrkeepalive.go
undef.go
unsafe_slice_data.go
unsafe_string.go
unsafe_string_data.go
unsafebuiltins.go
used.go
utf.go
varerr.go
varinit.go
winbatch.go
writebarrier.go
zerodivide.go
.gitattributes
.gitignore
CONTRIBUTING.md
LICENSE
PATENTS
README.md
SECURITY.md
VERSION
codereview.cfg

347 lines
5.6 KiB
Go
Raw Permalink Normal View History

// errorcheck
// Copyright 2009 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.
// Verify assignment rules are enforced by the compiler.
// Does not compile.
package main
type (
A [10]int
B []int
C chan int
F func() int
I interface {
m() int
}
M map[int]int
P *int
S struct {
X int
}
A1 [10]int
B1 []int
C1 chan int
F1 func() int
I1 interface {
m() int
}
M1 map[int]int
P1 *int
S1 struct {
X int
}
)
var (
a0 [10]int
b0 []int
c0 chan int
f0 func() int
i0 interface {
m() int
}
m0 map[int]int
p0 *int
s0 struct {
X int
}
a A
b B
c C
f F
i I
m M
p P
s S
a1 A1
b1 B1
c1 C1
f1 F1
i1 I1
m1 M1
p1 P1
s1 S1
pa0 *[10]int
pb0 *[]int
pc0 *chan int
pf0 *func() int
pi0 *interface {
m() int
}
pm0 *map[int]int
pp0 **int
ps0 *struct {
X int
}
pa *A
pb *B
pc *C
pf *F
pi *I
pm *M
pp *P
ps *S
pa1 *A1
pb1 *B1
pc1 *C1
pf1 *F1
pi1 *I1
pm1 *M1
pp1 *P1
ps1 *S1
)
func main() {
a0 = a
a0 = a1
a = a0
a = a1 // ERROR "cannot use"
a1 = a0
a1 = a // ERROR "cannot use"
b0 = b
b0 = b1
b = b0
b = b1 // ERROR "cannot use"
b1 = b0
b1 = b // ERROR "cannot use"
c0 = c
c0 = c1
c = c0
c = c1 // ERROR "cannot use"
c1 = c0
c1 = c // ERROR "cannot use"
f0 = f
f0 = f1
f = f0
f = f1 // ERROR "cannot use"
f1 = f0
f1 = f // ERROR "cannot use"
i0 = i
i0 = i1
i = i0
i = i1
i1 = i0
i1 = i
m0 = m
m0 = m1
m = m0
m = m1 // ERROR "cannot use"
m1 = m0
m1 = m // ERROR "cannot use"
p0 = p
p0 = p1
p = p0
p = p1 // ERROR "cannot use"
p1 = p0
p1 = p // ERROR "cannot use"
s0 = s
s0 = s1
s = s0
s = s1 // ERROR "cannot use"
s1 = s0
s1 = s // ERROR "cannot use"
test: Match gccgo error messages. The gccgo compiler does not always generate a "cannot use" error message. It only does so for named types. Maybe that should change, but in any case it is irrelevant for this test. assign1.go:105:4: error: incompatible types in assignment (cannot use type A1 as type A) assign1.go:107:5: error: incompatible types in assignment (cannot use type A as type A1) assign1.go:112:4: error: incompatible types in assignment (cannot use type B1 as type B) assign1.go:114:5: error: incompatible types in assignment (cannot use type B as type B1) assign1.go:119:4: error: incompatible types in assignment (cannot use type C1 as type C) assign1.go:121:5: error: incompatible types in assignment (cannot use type C as type C1) assign1.go:126:4: error: incompatible types in assignment (cannot use type F1 as type F) assign1.go:128:5: error: incompatible types in assignment (cannot use type F as type F1) assign1.go:140:4: error: incompatible types in assignment (cannot use type M1 as type M) assign1.go:142:5: error: incompatible types in assignment (cannot use type M as type M1) assign1.go:147:4: error: incompatible types in assignment (cannot use type P1 as type P) assign1.go:149:5: error: incompatible types in assignment (cannot use type P as type P1) assign1.go:154:4: error: incompatible types in assignment (cannot use type S1 as type S) assign1.go:156:5: error: incompatible types in assignment (cannot use type S as type S1) assign1.go:158:6: error: incompatible types in assignment assign1.go:159:6: error: incompatible types in assignment assign1.go:160:5: error: incompatible types in assignment assign1.go:161:5: error: incompatible types in assignment assign1.go:162:6: error: incompatible types in assignment assign1.go:163:6: error: incompatible types in assignment assign1.go:165:6: error: incompatible types in assignment assign1.go:166:6: error: incompatible types in assignment assign1.go:167:5: error: incompatible types in assignment assign1.go:168:5: error: incompatible types in assignment assign1.go:169:6: error: incompatible types in assignment assign1.go:170:6: error: incompatible types in assignment assign1.go:172:6: error: incompatible types in assignment assign1.go:173:6: error: incompatible types in assignment assign1.go:174:5: error: incompatible types in assignment assign1.go:175:5: error: incompatible types in assignment assign1.go:176:6: error: incompatible types in assignment assign1.go:177:6: error: incompatible types in assignment assign1.go:179:6: error: incompatible types in assignment assign1.go:180:6: error: incompatible types in assignment assign1.go:181:5: error: incompatible types in assignment assign1.go:182:5: error: incompatible types in assignment assign1.go:183:6: error: incompatible types in assignment assign1.go:184:6: error: incompatible types in assignment assign1.go:186:6: error: incompatible types in assignment assign1.go:187:6: error: incompatible types in assignment assign1.go:188:5: error: incompatible types in assignment assign1.go:189:5: error: incompatible types in assignment assign1.go:190:6: error: incompatible types in assignment assign1.go:191:6: error: incompatible types in assignment assign1.go:193:6: error: incompatible types in assignment assign1.go:194:6: error: incompatible types in assignment assign1.go:195:5: error: incompatible types in assignment assign1.go:196:5: error: incompatible types in assignment assign1.go:197:6: error: incompatible types in assignment assign1.go:198:6: error: incompatible types in assignment assign1.go:200:6: error: incompatible types in assignment assign1.go:201:6: error: incompatible types in assignment assign1.go:202:5: error: incompatible types in assignment assign1.go:203:5: error: incompatible types in assignment assign1.go:204:6: error: incompatible types in assignment assign1.go:205:6: error: incompatible types in assignment assign1.go:207:6: error: incompatible types in assignment assign1.go:208:6: error: incompatible types in assignment assign1.go:209:5: error: incompatible types in assignment assign1.go:210:5: error: incompatible types in assignment assign1.go:211:6: error: incompatible types in assignment assign1.go:212:6: error: incompatible types in assignment R=rsc CC=golang-dev https://golang.org/cl/2163044
2010-09-10 19:12:10 -07:00
pa0 = pa // ERROR "cannot use|incompatible"
pa0 = pa1 // ERROR "cannot use|incompatible"
pa = pa0 // ERROR "cannot use|incompatible"
pa = pa1 // ERROR "cannot use|incompatible"
pa1 = pa0 // ERROR "cannot use|incompatible"
pa1 = pa // ERROR "cannot use|incompatible"
pb0 = pb // ERROR "cannot use|incompatible"
pb0 = pb1 // ERROR "cannot use|incompatible"
pb = pb0 // ERROR "cannot use|incompatible"
pb = pb1 // ERROR "cannot use|incompatible"
pb1 = pb0 // ERROR "cannot use|incompatible"
pb1 = pb // ERROR "cannot use|incompatible"
pc0 = pc // ERROR "cannot use|incompatible"
pc0 = pc1 // ERROR "cannot use|incompatible"
pc = pc0 // ERROR "cannot use|incompatible"
pc = pc1 // ERROR "cannot use|incompatible"
pc1 = pc0 // ERROR "cannot use|incompatible"
pc1 = pc // ERROR "cannot use|incompatible"
pf0 = pf // ERROR "cannot use|incompatible"
pf0 = pf1 // ERROR "cannot use|incompatible"
pf = pf0 // ERROR "cannot use|incompatible"
pf = pf1 // ERROR "cannot use|incompatible"
pf1 = pf0 // ERROR "cannot use|incompatible"
pf1 = pf // ERROR "cannot use|incompatible"
pi0 = pi // ERROR "cannot use|incompatible"
pi0 = pi1 // ERROR "cannot use|incompatible"
pi = pi0 // ERROR "cannot use|incompatible"
pi = pi1 // ERROR "cannot use|incompatible"
pi1 = pi0 // ERROR "cannot use|incompatible"
pi1 = pi // ERROR "cannot use|incompatible"
pm0 = pm // ERROR "cannot use|incompatible"
pm0 = pm1 // ERROR "cannot use|incompatible"
pm = pm0 // ERROR "cannot use|incompatible"
pm = pm1 // ERROR "cannot use|incompatible"
pm1 = pm0 // ERROR "cannot use|incompatible"
pm1 = pm // ERROR "cannot use|incompatible"
pp0 = pp // ERROR "cannot use|incompatible"
pp0 = pp1 // ERROR "cannot use|incompatible"
pp = pp0 // ERROR "cannot use|incompatible"
pp = pp1 // ERROR "cannot use|incompatible"
pp1 = pp0 // ERROR "cannot use|incompatible"
pp1 = pp // ERROR "cannot use|incompatible"
ps0 = ps // ERROR "cannot use|incompatible"
ps0 = ps1 // ERROR "cannot use|incompatible"
ps = ps0 // ERROR "cannot use|incompatible"
ps = ps1 // ERROR "cannot use|incompatible"
ps1 = ps0 // ERROR "cannot use|incompatible"
ps1 = ps // ERROR "cannot use|incompatible"
a0 = [10]int(a)
a0 = [10]int(a1)
a = A(a0)
a = A(a1)
a1 = A1(a0)
a1 = A1(a)
b0 = []int(b)
b0 = []int(b1)
b = B(b0)
b = B(b1)
b1 = B1(b0)
b1 = B1(b)
c0 = chan int(c)
c0 = chan int(c1)
c = C(c0)
c = C(c1)
c1 = C1(c0)
c1 = C1(c)
f0 = func() int(f)
f0 = func() int(f1)
f = F(f0)
f = F(f1)
f1 = F1(f0)
f1 = F1(f)
i0 = interface {
m() int
}(i)
i0 = interface {
m() int
}(i1)
i = I(i0)
i = I(i1)
i1 = I1(i0)
i1 = I1(i)
m0 = map[int]int(m)
m0 = map[int]int(m1)
m = M(m0)
m = M(m1)
m1 = M1(m0)
m1 = M1(m)
p0 = (*int)(p)
p0 = (*int)(p1)
p = P(p0)
p = P(p1)
p1 = P1(p0)
p1 = P1(p)
s0 = struct {
X int
}(s)
s0 = struct {
X int
}(s1)
s = S(s0)
s = S(s1)
s1 = S1(s0)
s1 = S1(s)
pa0 = (*[10]int)(pa)
pa0 = (*[10]int)(pa1)
pa = (*A)(pa0)
pa = (*A)(pa1)
pa1 = (*A1)(pa0)
pa1 = (*A1)(pa)
pb0 = (*[]int)(pb)
pb0 = (*[]int)(pb1)
pb = (*B)(pb0)
pb = (*B)(pb1)
pb1 = (*B1)(pb0)
pb1 = (*B1)(pb)
pc0 = (*chan int)(pc)
pc0 = (*chan int)(pc1)
pc = (*C)(pc0)
pc = (*C)(pc1)
pc1 = (*C1)(pc0)
pc1 = (*C1)(pc)
pf0 = (*func() int)(pf)
pf0 = (*func() int)(pf1)
pf = (*F)(pf0)
pf = (*F)(pf1)
pf1 = (*F1)(pf0)
pf1 = (*F1)(pf)
pi0 = (*interface {
m() int
})(pi)
pi0 = (*interface {
m() int
})(pi1)
pi = (*I)(pi0)
pi = (*I)(pi1)
pi1 = (*I1)(pi0)
pi1 = (*I1)(pi)
pm0 = (*map[int]int)(pm)
pm0 = (*map[int]int)(pm1)
pm = (*M)(pm0)
pm = (*M)(pm1)
pm1 = (*M1)(pm0)
pm1 = (*M1)(pm)
pp0 = (**int)(pp)
pp0 = (**int)(pp1)
pp = (*P)(pp0)
pp = (*P)(pp1)
pp1 = (*P1)(pp0)
pp1 = (*P1)(pp)
ps0 = (*struct {
X int
})(ps)
ps0 = (*struct {
X int
})(ps1)
ps = (*S)(ps0)
ps = (*S)(ps1)
ps1 = (*S1)(ps0)
ps1 = (*S1)(ps)
}