aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKonstantin Shaposhnikov <k.shaposhnikov@gmail.com>2016-04-05 23:54:50 +0800
committerRob Pike <r@golang.org>2016-04-06 16:38:24 +0000
commit0d375381963d1236b1f70546386ffe92dddb59fc (patch)
treef8e07b7259e29b2436d290208333bca00ee8f42e /src
parent530e2164940d6650c43ecc8c652eed557e0bff8a (diff)
downloadgo-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.go3
-rw-r--r--src/cmd/vet/testdata/atomic.go9
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
+ }
}