OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [fixedbugs/] [bug284.go] - Blame information for rev 858

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 700 jeremybenn
// errchk $G -e $D/$F.go
2
 
3
// Copyright 2010 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 cases for revised conversion rules.
8
 
9
package main
10
 
11
func main() {
12
        type NewInt int
13
        i0 := 0
14
        var i1 int = 1
15
        var i2 NewInt = 1
16
        i0 = i0
17
        i0 = i1
18
        i0 = int(i2)
19
        i1 = i0
20
        i1 = i1
21
        i1 = int(i2)
22
        i2 = NewInt(i0)
23
        i2 = NewInt(i1)
24
        i2 = i2
25
 
26
        type A1 [3]int
27
        type A2 [3]NewInt
28
        var a0 [3]int
29
        var a1 A1
30
        var a2 A2
31
        a0 = a0
32
        a0 = a1
33
        a0 = [3]int(a2) // ERROR "cannot|invalid"
34
        a1 = a0
35
        a1 = a1
36
        a1 = A1(a2) // ERROR "cannot|invalid"
37
        a2 = A2(a0) // ERROR "cannot|invalid"
38
        a2 = A2(a1) // ERROR "cannot|invalid"
39
        a2 = a2
40
 
41
        type S1 struct {
42
                x int
43
        }
44
        type S2 struct {
45
                x NewInt
46
        }
47
        var s0 struct {
48
                x int
49
        }
50
        var s1 S1
51
        var s2 S2
52
        s0 = s0
53
        s0 = s1
54
        s0 = struct {
55
                x int
56
        }(s2) // ERROR "cannot|invalid"
57
        s1 = s0
58
        s1 = s1
59
        s1 = S1(s2) // ERROR "cannot|invalid"
60
        s2 = S2(s0) // ERROR "cannot|invalid"
61
        s2 = S2(s1) // ERROR "cannot|invalid"
62
        s2 = s2
63
 
64
        type P1 *int
65
        type P2 *NewInt
66
        var p0 *int
67
        var p1 P1
68
        var p2 P2
69
        p0 = p0
70
        p0 = p1
71
        p0 = (*int)(p2) // ERROR "cannot|invalid"
72
        p1 = p0
73
        p1 = p1
74
        p1 = P1(p2) // ERROR "cannot|invalid"
75
        p2 = P2(p0) // ERROR "cannot|invalid"
76
        p2 = P2(p1) // ERROR "cannot|invalid"
77
        p2 = p2
78
 
79
        type Q1 *struct {
80
                x int
81
        }
82
        type Q2 *S1
83
        var q0 *struct {
84
                x int
85
        }
86
        var q1 Q1
87
        var q2 Q2
88
        var ps1 *S1
89
        q0 = q0
90
        q0 = q1
91
        q0 = (*struct {
92
                x int
93
        })(ps1) // legal because of special conversion exception for pointers
94
        q0 = (*struct {
95
                x int
96
        })(q2) // ERROR "cannot|invalid"
97
        q1 = q0
98
        q1 = q1
99
        q1 = Q1(q2)    // ERROR "cannot|invalid"
100
        q2 = (*S1)(q0) // legal because of special conversion exception for pointers
101
        q2 = Q2(q1)    // ERROR "cannot|invalid"
102
        q2 = q2
103
 
104
        type F1 func(x NewInt) int
105
        type F2 func(x int) NewInt
106
        var f0 func(x NewInt) int
107
        var f1 F1
108
        var f2 F2
109
        f0 = f0
110
        f0 = f1
111
        f0 = func(x NewInt) int(f2) // ERROR "cannot|invalid"
112
        f1 = f0
113
        f1 = f1
114
        f1 = F1(f2) // ERROR "cannot|invalid"
115
        f2 = F2(f0) // ERROR "cannot|invalid"
116
        f2 = F2(f1) // ERROR "cannot|invalid"
117
        f2 = f2
118
 
119
        type X1 interface {
120
                f() int
121
        }
122
        type X2 interface {
123
                f() NewInt
124
        }
125
        var x0 interface {
126
                f() int
127
        }
128
        var x1 X1
129
        var x2 X2
130
        x0 = x0
131
        x0 = x1
132
        x0 = interface {
133
                f() int
134
        }(x2) // ERROR "cannot|need type assertion|incompatible"
135
        x1 = x0
136
        x1 = x1
137
        x1 = X1(x2) // ERROR "cannot|need type assertion|incompatible"
138
        x2 = X2(x0) // ERROR "cannot|need type assertion|incompatible"
139
        x2 = X2(x1) // ERROR "cannot|need type assertion|incompatible"
140
        x2 = x2
141
 
142
        type L1 []int
143
        type L2 []NewInt
144
        var l0 []int
145
        var l1 L1
146
        var l2 L2
147
        l0 = l0
148
        l0 = l1
149
        l0 = []int(l2) // ERROR "cannot|invalid"
150
        l1 = l0
151
        l1 = l1
152
        l1 = L1(l2) // ERROR "cannot|invalid"
153
        l2 = L2(l0) // ERROR "cannot|invalid"
154
        l2 = L2(l1) // ERROR "cannot|invalid"
155
        l2 = l2
156
 
157
        type M1 map[string]int
158
        type M2 map[string]NewInt
159
        var m0 []int
160
        var m1 L1
161
        var m2 L2
162
        m0 = m0
163
        m0 = m1
164
        m0 = []int(m2) // ERROR "cannot|invalid"
165
        m1 = m0
166
        m1 = m1
167
        m1 = L1(m2) // ERROR "cannot|invalid"
168
        m2 = L2(m0) // ERROR "cannot|invalid"
169
        m2 = L2(m1) // ERROR "cannot|invalid"
170
        m2 = m2
171
 
172
        type C1 chan int
173
        type C2 chan NewInt
174
        var c0 chan int
175
        var c1 C1
176
        var c2 C2
177
        c0 = c0
178
        c0 = c1
179
        c0 = chan int(c2) // ERROR "cannot|invalid"
180
        c1 = c0
181
        c1 = c1
182
        c1 = C1(c2) // ERROR "cannot|invalid"
183
        c2 = C2(c0) // ERROR "cannot|invalid"
184
        c2 = C2(c1) // ERROR "cannot|invalid"
185
        c2 = c2
186
 
187
        // internal compiler error (6g and gccgo)
188
        type T interface{}
189
        var _ T = 17 // assignment compatible
190
        _ = T(17)    // internal compiler error even though assignment compatible
191
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.