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

     1  // errorcheck
     2  
     3  // Copyright 2011 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 that illegal composite literals are detected.
     8  // Does not compile.
     9  
    10  package main
    11  
    12  var m map[int][3]int
    13  
    14  func f() [3]int
    15  
    16  func fp() *[3]int
    17  
    18  var mp map[int]*[3]int
    19  
    20  var (
    21  	_ = [3]int{1, 2, 3}[:] // ERROR "slice of unaddressable value"
    22  	_ = m[0][:]            // ERROR "slice of unaddressable value"
    23  	_ = f()[:]             // ERROR "slice of unaddressable value"
    24  
    25  	_ = 301[:]  // ERROR "cannot slice"
    26  	_ = 3.1[:]  // ERROR "cannot slice"
    27  	_ = true[:] // ERROR "cannot slice"
    28  
    29  	// these are okay because they are slicing a pointer to an array
    30  	_ = (&[3]int{1, 2, 3})[:]
    31  	_ = mp[0][:]
    32  	_ = fp()[:]
    33  )
    34  
    35  type T struct {
    36  	i    int
    37  	f    float64
    38  	s    string
    39  	next *T
    40  }
    41  
    42  type TP *T
    43  type Ti int
    44  
    45  var (
    46  	_ = &T{0, 0, "", nil}               // ok
    47  	_ = &T{i: 0, f: 0, s: "", next: {}} // ERROR "missing type in composite literal|omit types within composite literal"
    48  	_ = &T{0, 0, "", {}}                // ERROR "missing type in composite literal|omit types within composite literal"
    49  	_ = TP{i: 0, f: 0, s: "", next: {}} // ERROR "invalid pointer type"
    50  	_ = &Ti{}                           // ERROR "invalid pointer type"
    51  )
    52  
    53  type M map[T]T
    54  
    55  var (
    56  	_ = M{{i:1}: {i:2}}
    57  	_ = M{T{i:1}: {i:2}}
    58  	_ = M{{i:1}: T{i:2}}
    59  	_ = M{T{i:1}: T{i:2}}
    60  )
    61  
    62  type S struct { s [1]*M1 }
    63  type M1 map[S]int
    64  var _ = M1{{s:[1]*M1{&M1{{}:1}}}:2}
    65