modernc.org/gc@v1.0.1-0.20240304020402-f0dba7c97c2b/testdata/errchk/test/indirect.go (about) 1 // run 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 // Test various safe uses of indirection. 8 9 package main 10 11 var m0 map[string]int 12 var m1 *map[string]int 13 var m2 *map[string]int = &m0 14 var m3 map[string]int = map[string]int{"a": 1} 15 var m4 *map[string]int = &m3 16 17 var s0 string 18 var s1 *string 19 var s2 *string = &s0 20 var s3 string = "a" 21 var s4 *string = &s3 22 23 var a0 [10]int 24 var a1 *[10]int 25 var a2 *[10]int = &a0 26 27 var b0 []int 28 var b1 *[]int 29 var b2 *[]int = &b0 30 var b3 []int = []int{1, 2, 3} 31 var b4 *[]int = &b3 32 33 func crash() { 34 // these uses of nil pointers 35 // would crash but should type check 36 println("crash", 37 len(a1)+cap(a1)) 38 } 39 40 func nocrash() { 41 // this is spaced funny so that 42 // the compiler will print a different 43 // line number for each len call if 44 // it decides there are type errors. 45 // it might also help in the traceback. 46 x := 47 len(m0) + 48 len(m3) 49 if x != 1 { 50 println("wrong maplen") 51 panic("fail") 52 } 53 54 x = 55 len(s0) + 56 len(s3) 57 if x != 1 { 58 println("wrong stringlen") 59 panic("fail") 60 } 61 62 x = 63 len(a0) + 64 len(a2) 65 if x != 20 { 66 println("wrong arraylen") 67 panic("fail") 68 } 69 70 x = 71 len(b0) + 72 len(b3) 73 if x != 3 { 74 println("wrong slicelen") 75 panic("fail") 76 } 77 78 x = 79 cap(b0) + 80 cap(b3) 81 if x != 3 { 82 println("wrong slicecap") 83 panic("fail") 84 } 85 } 86 87 func main() { nocrash() }