// errchk $G -e $D/$F.go

// 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.

// Pass 2 label errors.

package main

var x int

func f() {
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"
		}
		goto L2
	}

L3:
	switch {
	case x > 10:
		if x == 11 {
			break L3
		}
		if x == 12 {
			continue L3 // ERROR "invalid continue label L3"
		}
		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"
		}
		if x == 15 {
			goto L4
		}
	}

L5:
	f()
	if x == 16 {
		break L5 // ERROR "invalid break label L5"
	}
	if x == 17 {
		continue L5 // ERROR "invalid continue label L5"
	}
	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
		}
	}
}
