--- /dev/null
+package main
+
+// Tests of 'freevars' query.
+// See go.tools/guru/guru_test.go for explanation.
+// See freevars.golden for expected query results.
+
+// TODO(adonovan): it's hard to test this query in a single line of gofmt'd code.
+
+type T struct {
+ a, b int
+}
+
+type S struct {
+ x int
+ t T
+}
+
+func f(int) {}
+
+func main() {
+ type C int
+ x := 1
+ const exp = 6
+ if y := 2; x+y+int(C(3)) != exp { // @freevars fv1 "if.*{"
+ panic("expected 6")
+ }
+
+ var s S
+
+ for x, y := range "foo" {
+ println(s.x + s.t.a + s.t.b + x + int(y)) // @freevars fv2 "print.*y."
+ }
+
+ f(x) // @freevars fv3 "f.x."
+
+loop: // @freevars fv-def-label "loop:"
+ for {
+ break loop // @freevars fv-ref-label "break loop"
+ }
+}