...
Run Format

Source file src/cmd/vet/testdata/copylock_range.go

Documentation: cmd/vet/testdata

  // 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"
  	}
  }
  

View as plain text