diff --git a/go/analysis/passes/loopclosure/loopclosure.go b/go/analysis/passes/loopclosure/loopclosure.go index 5291d1b2cd0..ae5b4151dbe 100644 --- a/go/analysis/passes/loopclosure/loopclosure.go +++ b/go/analysis/passes/loopclosure/loopclosure.go @@ -303,6 +303,11 @@ func parallelSubtest(info *types.Info, call *ast.CallExpr) []ast.Stmt { return nil } + if len(call.Args) != 2 { + // Ignore calls such as t.Run(fn()). + return nil + } + lit, _ := call.Args[1].(*ast.FuncLit) if lit == nil { return nil diff --git a/go/analysis/passes/loopclosure/testdata/src/subtests/subtest.go b/go/analysis/passes/loopclosure/testdata/src/subtests/subtest.go index c95fa1f0b1e..50283ec6152 100644 --- a/go/analysis/passes/loopclosure/testdata/src/subtests/subtest.go +++ b/go/analysis/passes/loopclosure/testdata/src/subtests/subtest.go @@ -140,6 +140,10 @@ func _(t *testing.T) { t.Parallel() println(test) // want "loop variable test captured by func literal" }) + + // Check that we do not have problems when t.Run has a single argument. + fn := func() (string, func(t *testing.T)) { return "", nil } + t.Run(fn()) } }