diff options
| author | Konstantin Shaposhnikov <k.shaposhnikov@gmail.com> | 2016-04-05 23:54:50 +0800 |
|---|---|---|
| committer | Rob Pike <r@golang.org> | 2016-04-06 16:38:24 +0000 |
| commit | 0d375381963d1236b1f70546386ffe92dddb59fc (patch) | |
| tree | f8e07b7259e29b2436d290208333bca00ee8f42e /src | |
| parent | 530e2164940d6650c43ecc8c652eed557e0bff8a (diff) | |
| download | go-0d375381963d1236b1f70546386ffe92dddb59fc.tar.xz | |
cmd/vet: do not treat declaration as asignment in atomic check
Fixes #15118
Change-Id: Iad56ed412535c8ac0a01c4bd7769fd3d37688ac9
Reviewed-on: https://go-review.googlesource.com/21526
Run-TryBot: Rob Pike <r@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/vet/atomic.go | 3 | ||||
| -rw-r--r-- | src/cmd/vet/testdata/atomic.go | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/cmd/vet/atomic.go b/src/cmd/vet/atomic.go index c084f13ab3..b2ca2d80f3 100644 --- a/src/cmd/vet/atomic.go +++ b/src/cmd/vet/atomic.go @@ -23,6 +23,9 @@ func checkAtomicAssignment(f *File, node ast.Node) { if len(n.Lhs) != len(n.Rhs) { return } + if len(n.Lhs) == 1 && n.Tok == token.DEFINE { + return + } for i, right := range n.Rhs { call, ok := right.(*ast.CallExpr) diff --git a/src/cmd/vet/testdata/atomic.go b/src/cmd/vet/testdata/atomic.go index 1ba261d941..d5a8e61184 100644 --- a/src/cmd/vet/testdata/atomic.go +++ b/src/cmd/vet/testdata/atomic.go @@ -40,4 +40,13 @@ func AtomicTests() { *ap[1] = atomic.AddUint64(ap[0], 1) x = atomic.AddUint64() // Used to make vet crash; now silently ignored. + + { + // A variable declaration creates a new variable in the current scope. + x := atomic.AddUint64(&x, 1) // ERROR "declaration of .x. shadows declaration at testdata/atomic.go:16" + + // Re-declaration assigns a new value. + x, w := atomic.AddUint64(&x, 1), 10 // ERROR "direct assignment to atomic value" + _ = w + } } |
