diff --git a/cmd/vet/atomic.go b/cmd/vet/atomic.go index dfe3f03c..a71a6920 100644 --- a/cmd/vet/atomic.go +++ b/cmd/vet/atomic.go @@ -44,6 +44,9 @@ func (f *File) checkAtomicAssignment(n *ast.AssignStmt) { // checkAtomicAddAssignment walks the atomic.Add* method calls checking for assigning the return value // to the same variable being used in the operation func (f *File) checkAtomicAddAssignment(left ast.Expr, call *ast.CallExpr) { + if len(call.Args) != 2 { + return + } arg := call.Args[0] broken := false diff --git a/cmd/vet/testdata/atomic.go b/cmd/vet/testdata/atomic.go index 7a6dcb8c..1ba261d9 100644 --- a/cmd/vet/testdata/atomic.go +++ b/cmd/vet/testdata/atomic.go @@ -38,4 +38,6 @@ func AtomicTests() { ap := []*uint64{&au[0], &au[1]} *ap[0] = atomic.AddUint64(ap[0], 1) // ERROR "direct assignment to atomic value" *ap[1] = atomic.AddUint64(ap[0], 1) + + x = atomic.AddUint64() // Used to make vet crash; now silently ignored. }