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 conversions involving strings are detected.
8// Does not compile.
9
10package main
11
12type Tbyte []byte
13type Trune []rune
14type Tint64 []int64
15type Tstring string
16
17func main() {
18	s := "hello"
19	sb := []byte("hello")
20	sr := []rune("hello")
21	si := []int64{'h', 'e', 'l', 'l', 'o'}
22
23	ts := Tstring(s)
24	tsb := Tbyte(sb)
25	tsr := Trune(sr)
26	tsi := Tint64(si)
27
28	_ = string(s)
29	_ = []byte(s)
30	_ = []rune(s)
31	_ = []int64(s) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
32	_ = Tstring(s)
33	_ = Tbyte(s)
34	_ = Trune(s)
35	_ = Tint64(s) // ERROR "cannot convert.*Tint64|invalid type conversion"
36
37	_ = string(sb)
38	_ = []byte(sb)
39	_ = []rune(sb)  // ERROR "cannot convert.*\[\]rune|invalid type conversion"
40	_ = []int64(sb) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
41	_ = Tstring(sb)
42	_ = Tbyte(sb)
43	_ = Trune(sb)  // ERROR "cannot convert.*Trune|invalid type conversion"
44	_ = Tint64(sb) // ERROR "cannot convert.*Tint64|invalid type conversion"
45
46	_ = string(sr)
47	_ = []byte(sr) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
48	_ = []rune(sr)
49	_ = []int64(sr) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
50	_ = Tstring(sr)
51	_ = Tbyte(sr) // ERROR "cannot convert.*Tbyte|invalid type conversion"
52	_ = Trune(sr)
53	_ = Tint64(sr) // ERROR "cannot convert.*Tint64|invalid type conversion"
54
55	_ = string(si) // ERROR "cannot convert.* string|invalid type conversion"
56	_ = []byte(si) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
57	_ = []rune(si) // ERROR "cannot convert.*\[\]rune|invalid type conversion"
58	_ = []int64(si)
59	_ = Tstring(si) // ERROR "cannot convert.*Tstring|invalid type conversion"
60	_ = Tbyte(si)   // ERROR "cannot convert.*Tbyte|invalid type conversion"
61	_ = Trune(si)   // ERROR "cannot convert.*Trune|invalid type conversion"
62	_ = Tint64(si)
63
64	_ = string(ts)
65	_ = []byte(ts)
66	_ = []rune(ts)
67	_ = []int64(ts) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
68	_ = Tstring(ts)
69	_ = Tbyte(ts)
70	_ = Trune(ts)
71	_ = Tint64(ts) // ERROR "cannot convert.*Tint64|invalid type conversion"
72
73	_ = string(tsb)
74	_ = []byte(tsb)
75	_ = []rune(tsb)  // ERROR "cannot convert.*\[\]rune|invalid type conversion"
76	_ = []int64(tsb) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
77	_ = Tstring(tsb)
78	_ = Tbyte(tsb)
79	_ = Trune(tsb)  // ERROR "cannot convert.*Trune|invalid type conversion"
80	_ = Tint64(tsb) // ERROR "cannot convert.*Tint64|invalid type conversion"
81
82	_ = string(tsr)
83	_ = []byte(tsr) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
84	_ = []rune(tsr)
85	_ = []int64(tsr) // ERROR "cannot convert.*\[\]int64|invalid type conversion"
86	_ = Tstring(tsr)
87	_ = Tbyte(tsr) // ERROR "cannot convert.*Tbyte|invalid type conversion"
88	_ = Trune(tsr)
89	_ = Tint64(tsr) // ERROR "cannot convert.*Tint64|invalid type conversion"
90
91	_ = string(tsi) // ERROR "cannot convert.* string|invalid type conversion"
92	_ = []byte(tsi) // ERROR "cannot convert.*\[\]byte|invalid type conversion"
93	_ = []rune(tsi) // ERROR "cannot convert.*\[\]rune|invalid type conversion"
94	_ = []int64(tsi)
95	_ = Tstring(tsi) // ERROR "cannot convert.*Tstring|invalid type conversion"
96	_ = Tbyte(tsi)   // ERROR "cannot convert.*Tbyte|invalid type conversion"
97	_ = Trune(tsi)   // ERROR "cannot convert.*Trune|invalid type conversion"
98	_ = Tint64(tsi)
99}
100