GoPLS Viewer

Home|gopls/go/analysis/passes/copylock/testdata/src/a/copylock_range.go
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
8package a
9
10import "sync"
11
12func 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 imu = range s { // want "range var mu copies lock: sync.Mutex"
32    }
33    for im := 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.it.mu = range s { // want "range var t.mu copies lock: sync.Mutex"
66    }
67}
68
MembersX
rangeMutex.RangeStmt_407.i
rangeMutex.RangeStmt_458.mu
rangeMutex.RangeStmt_876.k
rangeMutex.RangeStmt_1347.v
rangeMutex.RangeStmt_384.i
rangeMutex.RangeStmt_362.i
rangeMutex.RangeStmt_432.i
rangeMutex.RangeStmt_531.m
rangeMutex.RangeStmt_603.i
rangeMutex.a
rangeMutex.RangeStmt_770.m
rangeMutex.m
rangeMutex.mu
rangeMutex.RangeStmt_1018.k
rangeMutex.RangeStmt_1090.mu
rangeMutex.RangeStmt_945.mu
rangeMutex.RangeStmt_676.m
rangeMutex.RangeStmt_1163.v
rangeMutex.RangeStmt_1277.mu
rangeMutex.RangeStmt_603.mu
rangeMutex.i
rangeMutex.s
rangeMutex.RangeStmt_676.i
rangeMutex
Members
X