--- /dev/null
+package pkg
+
+import (
+ "compress/flate"
+ "unsafe"
+)
+
+type t1 struct {
+ a int
+ b int
+}
+
+type t2 struct {
+ a int
+ b int
+}
+
+type t3 struct {
+ a int
+ b int // want `b`
+}
+
+type t4 struct {
+ a int
+ b int // want `b`
+}
+
+type t5 struct {
+ a int
+ b int
+}
+
+type t6 struct {
+ a int
+ b int
+}
+
+type t7 struct {
+ a int
+ b int
+}
+
+type t8 struct {
+ a int
+ b int
+}
+
+type t9 struct {
+ Offset int64
+ Err error
+}
+
+type t10 struct {
+ a int
+ b int
+}
+
+func fn() {
+ // All fields in t2 used because they're initialised in t1
+ v1 := t1{0, 1}
+ v2 := t2(v1)
+ _ = v2
+
+ // Field b isn't used by anyone
+ v3 := t3{}
+ v4 := t4(v3)
+ println(v3.a)
+ _ = v4
+
+ // Both fields are used
+ v5 := t5{}
+ v6 := t6(v5)
+ println(v5.a)
+ println(v6.b)
+
+ v7 := &t7{}
+ println(v7.a)
+ println(v7.b)
+ v8 := (*t8)(v7)
+ _ = v8
+
+ vb := flate.ReadError{}
+ v9 := t9(vb)
+ _ = v9
+
+ // All fields are used because this is an unsafe conversion
+ var b []byte
+ v10 := (*t10)(unsafe.Pointer(&b[0]))
+ _ = v10
+}
+
+func init() { fn() }