github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/cmd/vet/test_atomic.go (about) 1 // Copyright 2013 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build vet_test 6 7 // This file contains tests for the atomic checker. 8 9 package main 10 11 import ( 12 "sync/atomic" 13 ) 14 15 type Counter uint64 16 17 func AtomicTests() { 18 x := uint64(1) 19 x = atomic.AddUint64(&x, 1) // ERROR "direct assignment to atomic value" 20 _, x = 10, atomic.AddUint64(&x, 1) // ERROR "direct assignment to atomic value" 21 x, _ = atomic.AddUint64(&x, 1), 10 // ERROR "direct assignment to atomic value" 22 23 y := &x 24 *y = atomic.AddUint64(y, 1) // ERROR "direct assignment to atomic value" 25 26 var su struct{ Counter uint64 } 27 su.Counter = atomic.AddUint64(&su.Counter, 1) // ERROR "direct assignment to atomic value" 28 z1 := atomic.AddUint64(&su.Counter, 1) 29 _ = z1 // Avoid err "z declared and not used" 30 31 var sp struct{ Counter *uint64 } 32 *sp.Counter = atomic.AddUint64(sp.Counter, 1) // ERROR "direct assignment to atomic value" 33 z2 := atomic.AddUint64(sp.Counter, 1) 34 _ = z2 // Avoid err "z declared and not used" 35 36 au := []uint64{10, 20} 37 au[0] = atomic.AddUint64(&au[0], 1) // ERROR "direct assignment to atomic value" 38 au[1] = atomic.AddUint64(&au[0], 1) 39 40 ap := []*uint64{&au[0], &au[1]} 41 *ap[0] = atomic.AddUint64(ap[0], 1) // ERROR "direct assignment to atomic value" 42 *ap[1] = atomic.AddUint64(ap[0], 1) 43 }