modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/assign.go (about)

     1  // errorcheck
     2  
     3  // Copyright 2009 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // Verify simple assignment errors are caught by the compiler.
     8  // Does not compile.
     9  
    10  package main
    11  
    12  import "sync"
    13  
    14  type T struct {
    15  	int
    16  	sync.Mutex
    17  }
    18  
    19  func main() {
    20  	{
    21  		var x, y sync.Mutex
    22  		x = y // ok
    23  		_ = x
    24  	}
    25  	{
    26  		var x, y T
    27  		x = y // ok
    28  		_ = x
    29  	}
    30  	{
    31  		var x, y [2]sync.Mutex
    32  		x = y // ok
    33  		_ = x
    34  	}
    35  	{
    36  		var x, y [2]T
    37  		x = y // ok
    38  		_ = x
    39  	}
    40  	{
    41  		x := sync.Mutex{0, 0} // ERROR "assignment.*Mutex"
    42  		_ = x
    43  	}
    44  	{
    45  		x := sync.Mutex{key: 0} // ERROR "(unknown|assignment).*Mutex"
    46  		_ = x
    47  	}
    48  	{
    49  		x := &sync.Mutex{} // ok
    50  		var y sync.Mutex   // ok
    51  		y = *x             // ok
    52  		*x = y             // ok
    53  		_ = x
    54  		_ = y
    55  	}
    56  	{
    57  		var x = 1
    58  		{
    59  			x, x := 2, 3 // ERROR "x repeated on left side of :="
    60  			_ = x
    61  		}
    62  		_ = x
    63  	}
    64  	{
    65  		a, a := 1, 2 // ERROR "a repeated on left side of :="
    66  		_ = a
    67  	}
    68  }