mirror of
https://github.com/golang/go
synced 2024-11-11 19:51:37 -07:00
[dev.regabi] test: add exhaustive test of evaluated but not used
Change-Id: I49db03c88b7595f1ea593df568244ad6aad3b024 Reviewed-on: https://go-review.googlesource.com/c/go/+/275443 Trust: Russ Cox <rsc@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
2cec6c4a8c
commit
dcc640e839
142
test/used.go
Normal file
142
test/used.go
Normal file
@ -0,0 +1,142 @@
|
||||
// errorcheck
|
||||
|
||||
// Copyright 2020 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.
|
||||
|
||||
package p
|
||||
|
||||
import "unsafe"
|
||||
|
||||
const C = 1
|
||||
|
||||
var x1, x int
|
||||
var b bool
|
||||
var s string
|
||||
var c chan int
|
||||
var cp complex128
|
||||
var slice []int
|
||||
var array [2]int
|
||||
var bytes []byte
|
||||
var runes []rune
|
||||
var r rune
|
||||
|
||||
func f0() {}
|
||||
func f1() int { return 1 }
|
||||
func f2() (int, int) { return 1, 1 }
|
||||
|
||||
type T struct{ X int }
|
||||
|
||||
func (T) M1() int { return 1 }
|
||||
func (T) M0() {}
|
||||
func (T) M() {}
|
||||
|
||||
var t T
|
||||
var tp *T
|
||||
|
||||
type I interface{ M() }
|
||||
|
||||
var i I
|
||||
|
||||
var m map[int]int
|
||||
|
||||
func _() {
|
||||
// Note: if the next line changes to x, the error silences the x+x etc below!
|
||||
x1 // ERROR "x1 evaluated but not used"
|
||||
|
||||
nil // ERROR "nil evaluated but not used"
|
||||
C // ERROR "C evaluated but not used"
|
||||
1 // ERROR "1 evaluated but not used"
|
||||
x + x // ERROR "x \+ x evaluated but not used"
|
||||
x - x // ERROR "x - x evaluated but not used"
|
||||
x | x // ERROR "x \| x evaluated but not used"
|
||||
"a" + s // ERROR ".a. \+ s evaluated but not used"
|
||||
&x // ERROR "&x evaluated but not used"
|
||||
b && b // ERROR "b && b evaluated but not used"
|
||||
append(slice, 1) // ERROR "append\(slice, 1\) evaluated but not used"
|
||||
string(bytes) // ERROR "string\(bytes\) evaluated but not used"
|
||||
string(runes) // ERROR "string\(runes\) evaluated but not used"
|
||||
f0() // ok
|
||||
f1() // ok
|
||||
f2() // ok
|
||||
_ = f0() // ERROR "f0\(\) used as value"
|
||||
_ = f1() // ok
|
||||
_, _ = f2() // ok
|
||||
_ = f2() // ERROR "assignment mismatch: 1 variable but f2 returns 2 values"
|
||||
T.M0 // ERROR "T.M0 evaluated but not used"
|
||||
t.M0 // ERROR "t.M0 evaluated but not used"
|
||||
cap // ERROR "use of builtin cap not in function call"
|
||||
cap(slice) // ERROR "cap\(slice\) evaluated but not used"
|
||||
close(c) // ok
|
||||
_ = close(c) // ERROR "close\(c\) used as value"
|
||||
func() {} // ERROR "func literal evaluated but not used"
|
||||
X{} // ERROR "undefined: X"
|
||||
map[string]int{} // ERROR "map\[string\]int{} evaluated but not used"
|
||||
struct{}{} // ERROR "struct ?{}{} evaluated but not used"
|
||||
[1]int{} // ERROR "\[1\]int{} evaluated but not used"
|
||||
[]int{} // ERROR "\[\]int{} evaluated but not used"
|
||||
&struct{}{} // ERROR "&struct ?{}{} evaluated but not used"
|
||||
float32(x) // ERROR "float32\(x\) evaluated but not used"
|
||||
I(t) // ERROR "I\(t\) evaluated but not used"
|
||||
int(x) // ERROR "int\(x\) evaluated but not used"
|
||||
copy(slice, slice) // ok
|
||||
_ = copy(slice, slice) // ok
|
||||
delete(m, 1) // ok
|
||||
_ = delete(m, 1) // ERROR "delete\(m, 1\) used as value"
|
||||
t.X // ERROR "t.X evaluated but not used"
|
||||
tp.X // ERROR "tp.X evaluated but not used"
|
||||
t.M // ERROR "t.M evaluated but not used"
|
||||
I.M // ERROR "I.M evaluated but not used"
|
||||
i.(T) // ERROR "i.\(T\) evaluated but not used"
|
||||
x == x // ERROR "x == x evaluated but not used"
|
||||
x != x // ERROR "x != x evaluated but not used"
|
||||
x != x // ERROR "x != x evaluated but not used"
|
||||
x < x // ERROR "x < x evaluated but not used"
|
||||
x >= x // ERROR "x >= x evaluated but not used"
|
||||
x > x // ERROR "x > x evaluated but not used"
|
||||
*tp // ERROR "\*tp evaluated but not used"
|
||||
slice[0] // ERROR "slice\[0\] evaluated but not used"
|
||||
m[1] // ERROR "m\[1\] evaluated but not used"
|
||||
len(slice) // ERROR "len\(slice\) evaluated but not used"
|
||||
make(chan int) // ERROR "make\(chan int\) evaluated but not used"
|
||||
make(map[int]int) // ERROR "make\(map\[int\]int\) evaluated but not used"
|
||||
make([]int, 1) // ERROR "make\(\[\]int, 1\) evaluated but not used"
|
||||
x * x // ERROR "x \* x evaluated but not used"
|
||||
x / x // ERROR "x / x evaluated but not used"
|
||||
x % x // ERROR "x % x evaluated but not used"
|
||||
x << x // ERROR "x << x evaluated but not used"
|
||||
x >> x // ERROR "x >> x evaluated but not used"
|
||||
x & x // ERROR "x & x evaluated but not used"
|
||||
x &^ x // ERROR "x &\^ x evaluated but not used"
|
||||
new(int) // ERROR "new\(int\) evaluated but not used"
|
||||
!b // ERROR "!b evaluated but not used"
|
||||
^x // ERROR "\^x evaluated but not used"
|
||||
+x // ERROR "\+x evaluated but not used"
|
||||
-x // ERROR "-x evaluated but not used"
|
||||
b || b // ERROR "b \|\| b evaluated but not used"
|
||||
panic(1) // ok
|
||||
_ = panic(1) // ERROR "panic\(1\) used as value"
|
||||
print(1) // ok
|
||||
_ = print(1) // ERROR "print\(1\) used as value"
|
||||
println(1) // ok
|
||||
_ = println(1) // ERROR "println\(1\) used as value"
|
||||
(x) // ERROR "x evaluated but not used"
|
||||
c <- 1 // ok
|
||||
slice[1:1] // ERROR "slice\[1:1\] evaluated but not used"
|
||||
array[1:1] // ERROR "array\[1:1\] evaluated but not used"
|
||||
s[1:1] // ERROR "s\[1:1\] evaluated but not used"
|
||||
slice[1:1:1] // ERROR "slice\[1:1:1\] evaluated but not used"
|
||||
array[1:1:1] // ERROR "array\[1:1:1\] evaluated but not used"
|
||||
recover() // ok
|
||||
<-c // ok
|
||||
string(r) // ERROR "string\(r\) evaluated but not used"
|
||||
iota // ERROR "undefined: iota"
|
||||
real(cp) // ERROR "real\(cp\) evaluated but not used"
|
||||
imag(cp) // ERROR "imag\(cp\) evaluated but not used"
|
||||
complex(1, 2) // ERROR "complex\(1, 2\) evaluated but not used"
|
||||
unsafe.Alignof(t.X) // ERROR "unsafe.Alignof\(t.X\) evaluated but not used"
|
||||
unsafe.Offsetof(t.X) // ERROR "unsafe.Offsetof\(t.X\) evaluated but not used"
|
||||
unsafe.Sizeof(t) // ERROR "unsafe.Sizeof\(t\) evaluated but not used"
|
||||
_ = new(x) // ERROR "x is not a type"
|
||||
_ = int // ERROR "type int is not an expression"
|
||||
}
|
Loading…
Reference in New Issue
Block a user