--- /dev/null
+// +build ignore
+
+package a
+
+// This test exercises the synthesis of testmain packages for tests.
+// The test framework doesn't directly let us perform negative
+// assertions (i.e. that TestingQuux isn't called, or that its
+// parameter's PTS is empty) so this test is rather roundabout.
+
+import "testing"
+
+func log(f func(*testing.T)) {
+ // The PTS of f is the set of called tests. TestingQuux is not present.
+ print(f) // @pointsto main.Test | main.TestFoo
+}
+
+func Test(t *testing.T) {
+ // Don't assert @pointsto(t) since its label contains a fragile line number.
+ log(Test)
+}
+
+func TestFoo(t *testing.T) {
+ // Don't assert @pointsto(t) since its label contains a fragile line number.
+ log(TestFoo)
+}
+
+func TestingQuux(t *testing.T) {
+ // We can't assert @pointsto(t) since this is dead code.
+ log(TestingQuux)
+}
+
+func BenchmarkFoo(b *testing.B) {
+}
+
+func ExampleBar() {
+}
+
+// Excludes TestingQuux.
+// @calls testing.tRunner -> main.Test
+// @calls testing.tRunner -> main.TestFoo
+// @calls testing.runExample -> main.ExampleBar
+// @calls (*testing.B).runN -> main.BenchmarkFoo