// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// This file contains tests for the copylock checker's
// range statement analysis.
package testdata
import "sync"
func rangeMutex() {
var mu sync.Mutex
var i int
var s []sync.Mutex
for range s {
}
for i = range s {
}
for i := range s {
}
for i, _ = range s {
}
for i, _ := range s {
}
for _, mu = range s { // ERROR "range var mu copies lock: sync.Mutex"
}
for _, m := range s { // ERROR "range var m copies lock: sync.Mutex"
}
for i, mu = range s { // ERROR "range var mu copies lock: sync.Mutex"
}
for i, m := range s { // ERROR "range var m copies lock: sync.Mutex"
}
var a [3]sync.Mutex
for _, m := range a { // ERROR "range var m copies lock: sync.Mutex"
}
var m map[sync.Mutex]sync.Mutex
for k := range m { // ERROR "range var k copies lock: sync.Mutex"
}
for mu, _ = range m { // ERROR "range var mu copies lock: sync.Mutex"
}
for k, _ := range m { // ERROR "range var k copies lock: sync.Mutex"
}
for _, mu = range m { // ERROR "range var mu copies lock: sync.Mutex"
}
for _, v := range m { // ERROR "range var v copies lock: sync.Mutex"
}
var c chan sync.Mutex
for range c {
}
for mu = range c { // ERROR "range var mu copies lock: sync.Mutex"
}
for v := range c { // ERROR "range var v copies lock: sync.Mutex"
}
// Test non-idents in range variables
var t struct {
i int
mu sync.Mutex
}
for t.i, t.mu = range s { // ERROR "range var t.mu copies lock: sync.Mutex"
}
}