From 91b1b28499e6946ccc9bbc23c8c3a71015c60c6c Mon Sep 17 00:00:00 2001 From: Robert Obryk Date: Wed, 14 May 2014 12:16:58 -0700 Subject: [PATCH] go.tools/cmd/vet: fix a panic on invalid AddInt Ignore calls to various flavours of atomic.AddInt with a wrong number of arguments. LGTM=r R=golang-codereviews, r CC=golang-codereviews https://golang.org/cl/91370045 --- cmd/vet/atomic.go | 3 +++ cmd/vet/testdata/atomic.go | 2 ++ 2 files changed, 5 insertions(+) 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. }