1 | // Copyright 2014 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 | // This file contains tests for the copylock checker's |
6 | // range statement analysis. |
7 | |
8 | package a |
9 | |
10 | import "sync" |
11 | |
12 | func rangeMutex() { |
13 | var mu sync.Mutex |
14 | var i int |
15 | |
16 | var s []sync.Mutex |
17 | for range s { |
18 | } |
19 | for i = range s { |
20 | } |
21 | for i := range s { |
22 | } |
23 | for i, _ = range s { |
24 | } |
25 | for i, _ := range s { |
26 | } |
27 | for _, mu = range s { // want "range var mu copies lock: sync.Mutex" |
28 | } |
29 | for _, m := range s { // want "range var m copies lock: sync.Mutex" |
30 | } |
31 | for i, mu = range s { // want "range var mu copies lock: sync.Mutex" |
32 | } |
33 | for i, m := range s { // want "range var m copies lock: sync.Mutex" |
34 | } |
35 | |
36 | var a [3]sync.Mutex |
37 | for _, m := range a { // want "range var m copies lock: sync.Mutex" |
38 | } |
39 | |
40 | var m map[sync.Mutex]sync.Mutex |
41 | for k := range m { // want "range var k copies lock: sync.Mutex" |
42 | } |
43 | for mu, _ = range m { // want "range var mu copies lock: sync.Mutex" |
44 | } |
45 | for k, _ := range m { // want "range var k copies lock: sync.Mutex" |
46 | } |
47 | for _, mu = range m { // want "range var mu copies lock: sync.Mutex" |
48 | } |
49 | for _, v := range m { // want "range var v copies lock: sync.Mutex" |
50 | } |
51 | |
52 | var c chan sync.Mutex |
53 | for range c { |
54 | } |
55 | for mu = range c { // want "range var mu copies lock: sync.Mutex" |
56 | } |
57 | for v := range c { // want "range var v copies lock: sync.Mutex" |
58 | } |
59 | |
60 | // Test non-idents in range variables |
61 | var t struct { |
62 | i int |
63 | mu sync.Mutex |
64 | } |
65 | for t.i, t.mu = range s { // want "range var t.mu copies lock: sync.Mutex" |
66 | } |
67 | } |
68 |
Members