Home | History | Annotate | Download | only in test
      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 that illegal uses of indirection are caught by the compiler.
      8 // Does not compile.
      9 
     10 package main
     11 
     12 var m0 map[string]int
     13 var m1 *map[string]int
     14 var m2 *map[string]int = &m0
     15 var m3 map[string]int = map[string]int{"a": 1}
     16 var m4 *map[string]int = &m3
     17 
     18 var s0 string
     19 var s1 *string
     20 var s2 *string = &s0
     21 var s3 string = "a"
     22 var s4 *string = &s3
     23 
     24 var a0 [10]int
     25 var a1 *[10]int
     26 var a2 *[10]int = &a0
     27 
     28 var b0 []int
     29 var b1 *[]int
     30 var b2 *[]int = &b0
     31 var b3 []int = []int{1, 2, 3}
     32 var b4 *[]int = &b3
     33 
     34 func f() {
     35 	// this is spaced funny so that
     36 	// the compiler will print a different
     37 	// line number for each len call when
     38 	// it decides there are type errors.
     39 	x :=
     40 		len(m0)+
     41 		len(m1)+	// ERROR "illegal|invalid|must be"
     42 		len(m2)+	// ERROR "illegal|invalid|must be"
     43 		len(m3)+
     44 		len(m4)+	// ERROR "illegal|invalid|must be"
     45 
     46 		len(s0)+
     47 		len(s1)+	// ERROR "illegal|invalid|must be"
     48 		len(s2)+	// ERROR "illegal|invalid|must be"
     49 		len(s3)+
     50 		len(s4)+	// ERROR "illegal|invalid|must be"
     51 
     52 		len(a0)+
     53 		len(a1)+
     54 		len(a2)+
     55 
     56 		cap(a0)+
     57 		cap(a1)+
     58 		cap(a2)+
     59 
     60 		len(b0)+
     61 		len(b1)+	// ERROR "illegal|invalid|must be"
     62 		len(b2)+	// ERROR "illegal|invalid|must be"
     63 		len(b3)+
     64 		len(b4)+	// ERROR "illegal|invalid|must be"
     65 
     66 		cap(b0)+
     67 		cap(b1)+	// ERROR "illegal|invalid|must be"
     68 		cap(b2)+	// ERROR "illegal|invalid|must be"
     69 		cap(b3)+
     70 		cap(b4)	// ERROR "illegal|invalid|must be"
     71 	_ = x
     72 }
     73