blob: bb20f3009bfdd010b6806c0e36ddb178d50062c8 [file] [log] [blame]
Rémy Oudompheng2ece2f52012-02-18 22:15:42 +01001// run
Russ Coxcbd08ed2009-01-09 15:38:01 -08002
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
Rob Pike501f0b52012-02-23 18:47:26 +11007// Test various safe uses of indirection.
8
Russ Coxcbd08ed2009-01-09 15:38:01 -08009package main
10
11var m0 map[string]int
12var m1 *map[string]int
13var m2 *map[string]int = &m0
Russ Coxbe2edb52009-03-03 08:39:12 -080014var m3 map[string]int = map[string]int{"a": 1}
Russ Coxcbd08ed2009-01-09 15:38:01 -080015var m4 *map[string]int = &m3
16
17var s0 string
18var s1 *string
19var s2 *string = &s0
20var s3 string = "a"
21var s4 *string = &s3
22
23var a0 [10]int
24var a1 *[10]int
25var a2 *[10]int = &a0
26
27var b0 []int
28var b1 *[]int
29var b2 *[]int = &b0
Russ Coxbe2edb52009-03-03 08:39:12 -080030var b3 []int = []int{1, 2, 3}
Russ Coxcbd08ed2009-01-09 15:38:01 -080031var b4 *[]int = &b3
32
Robert Griesemer542099d2009-12-09 19:27:08 -080033func crash() {
Russ Coxcbd08ed2009-01-09 15:38:01 -080034 // these uses of nil pointers
35 // would crash but should type check
36 println("crash",
Rob Pike325cf8e2010-03-24 16:46:53 -070037 len(a1)+cap(a1))
Russ Coxcbd08ed2009-01-09 15:38:01 -080038}
39
Robert Griesemer542099d2009-12-09 19:27:08 -080040func nocrash() {
Russ Coxcbd08ed2009-01-09 15:38:01 -080041 // 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 :=
Rob Pike325cf8e2010-03-24 16:46:53 -070047 len(m0) +
48 len(m3)
Russ Cox4c5c0f42009-06-25 14:44:09 -070049 if x != 1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070050 println("wrong maplen")
51 panic("fail")
Russ Coxcbd08ed2009-01-09 15:38:01 -080052 }
53
54 x =
Rob Pike325cf8e2010-03-24 16:46:53 -070055 len(s0) +
56 len(s3)
Russ Cox4c5c0f42009-06-25 14:44:09 -070057 if x != 1 {
Rob Pike325cf8e2010-03-24 16:46:53 -070058 println("wrong stringlen")
59 panic("fail")
Russ Coxcbd08ed2009-01-09 15:38:01 -080060 }
61
62 x =
Rob Pike325cf8e2010-03-24 16:46:53 -070063 len(a0) +
64 len(a2)
Russ Coxcbd08ed2009-01-09 15:38:01 -080065 if x != 20 {
Rob Pike325cf8e2010-03-24 16:46:53 -070066 println("wrong arraylen")
67 panic("fail")
Russ Coxcbd08ed2009-01-09 15:38:01 -080068 }
69
70 x =
Rob Pike325cf8e2010-03-24 16:46:53 -070071 len(b0) +
72 len(b3)
Russ Cox4c5c0f42009-06-25 14:44:09 -070073 if x != 3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070074 println("wrong slicelen")
75 panic("fail")
Russ Coxcbd08ed2009-01-09 15:38:01 -080076 }
77
78 x =
Rob Pike325cf8e2010-03-24 16:46:53 -070079 cap(b0) +
80 cap(b3)
Russ Cox4c5c0f42009-06-25 14:44:09 -070081 if x != 3 {
Rob Pike325cf8e2010-03-24 16:46:53 -070082 println("wrong slicecap")
83 panic("fail")
Russ Coxcbd08ed2009-01-09 15:38:01 -080084 }
85}
86
Rob Pike325cf8e2010-03-24 16:46:53 -070087func main() { nocrash() }