summaryrefslogtreecommitdiff
path: root/test/label1.go
blob: a8eaecbff2fa0a50f0af0dabe807aafee7022825 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// errorcheck

// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Verify that erroneous labels are caught by the compiler.
// This set is caught by pass 2. That's why this file is label1.go.
// Does not compile.

package main

var x int

func f1() {
	switch x {
	case 1:
		continue // ERROR "continue is not in a loop$|continue statement not within for"
	}
	select {
	default:
		continue // ERROR "continue is not in a loop$|continue statement not within for"
	}

}

func f2() {
L1:
	for {
		if x == 0 {
			break L1
		}
		if x == 1 {
			continue L1
		}
		goto L1
	}

L2:
	select {
	default:
		if x == 0 {
			break L2
		}
		if x == 1 {
			continue L2 // ERROR "invalid continue label .*L2|continue is not in a loop$"
		}
		goto L2
	}

	for {
		if x == 1 {
			continue L2 // ERROR "invalid continue label .*L2"
		}
	}

L3:
	switch {
	case x > 10:
		if x == 11 {
			break L3
		}
		if x == 12 {
			continue L3 // ERROR "invalid continue label .*L3|continue is not in a loop$"
		}
		goto L3
	}

L4:
	if true {
		if x == 13 {
			break L4 // ERROR "invalid break label .*L4"
		}
		if x == 14 {
			continue L4 // ERROR "invalid continue label .*L4|continue is not in a loop$"
		}
		if x == 15 {
			goto L4
		}
	}

L5:
	f2()
	if x == 16 {
		break L5 // ERROR "invalid break label .*L5"
	}
	if x == 17 {
		continue L5 // ERROR "invalid continue label .*L5|continue is not in a loop$"
	}
	if x == 18 {
		goto L5
	}

	for {
		if x == 19 {
			break L1 // ERROR "invalid break label .*L1"
		}
		if x == 20 {
			continue L1 // ERROR "invalid continue label .*L1"
		}
		if x == 21 {
			goto L1
		}
	}

	continue // ERROR "continue is not in a loop$|continue statement not within for"
	for {
		continue on // ERROR "continue label not defined: on|invalid continue label .*on"
	}

	break // ERROR "break is not in a loop, switch, or select|break statement not within for or switch or select"
	for {
		break dance // ERROR "break label not defined: dance|invalid break label .*dance"
	}

	for {
		switch x {
		case 1:
			continue
		}
	}
}