--- /dev/null
+package pkg
+
+import "fmt"
+
+func fn1() {
+ var x int
+ x = gen() // want `this value of x is never used`
+ x = gen()
+ println(x)
+
+ var y int
+ if true {
+ y = gen() // want `this value of y is never used`
+ }
+ y = gen()
+ println(y)
+}
+
+func gen() int {
+ println() // make it unpure
+ return 0
+}
+
+func fn2() {
+ x, y := gen(), gen() // want `this value of x is never used` `this value of y is never used`
+ x, y = gen(), gen()
+ println(x, y)
+}
+
+func fn3() {
+ x := uint32(0)
+ if true {
+ x = 1
+ } else {
+ x = 2
+ }
+ println(x)
+}
+
+func gen2() (int, int) {
+ println()
+ return 0, 0
+}
+
+func fn4() {
+ x, y := gen2() // want `this value of x is never used`
+ println(y)
+ x, y = gen2() // want `this value of x is never used` `this value of y is never used`
+ x, _ = gen2() // want `this value of x is never used`
+ x, y = gen2()
+ println(x, y)
+}
+
+func fn5(m map[string]string) {
+ v, ok := m[""] // want `this value of v is never used` `this value of ok is never used`
+ v, ok = m[""]
+ println(v, ok)
+}
+
+func fn6() {
+ x := gen()
+ // Do not report variables if they've been assigned to the blank identifier
+ _ = x
+}
+
+func fn7() {
+ func() {
+ var x int
+ x = gen() // want `this value of x is never used`
+ x = gen()
+ println(x)
+ }()
+}
+
+func fn() int { println(); return 0 }
+
+var y = func() {
+ v := fn() // want `never used`
+ v = fn()
+ println(v)
+}
+
+func fn8() {
+ x := gen()
+ switch x {
+ }
+
+ y := gen() // want `this value of y is never used`
+ y = gen()
+ switch y {
+ }
+
+ z, _ := gen2()
+ switch z {
+ }
+
+ _, a := gen2()
+ switch a {
+ }
+
+ b, c := gen2() // want `this value of b is never used`
+ println(c)
+ b, c = gen2() // want `this value of c is never used`
+ switch b {
+ }
+}
+
+func fn9() {
+ xs := []int{}
+ for _, x := range xs {
+ foo, err := work(x) // want `this value of foo is never used`
+ if err != nil {
+ return
+ }
+ if !foo {
+ continue
+ }
+ }
+}
+
+func work(int) (bool, error) { return false, nil }
+
+func resolveWeakTypes(types []int) {
+ for i := range types {
+ runEnd := findRunLimit(i)
+
+ if true {
+ _ = runEnd
+ }
+ i = runEnd // want `this value of i is never used`
+ }
+}
+
+func findRunLimit(int) int { return 0 }
+
+func fn10() {
+ slice := []string(nil)
+ if true {
+ slice = []string{"1", "2"}
+ } else {
+ slice = []string{"3", "4"}
+ }
+ fmt.Println(slice)
+}