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

// terminating statements

package stmt1

func _() {}

func _() int {} /* ERROR "missing return" */

func _() int { panic(0) }
func _() int { (panic(0)) }

// block statements
func _(x, y int) (z int) {
	{
		return
	}
}

func _(x, y int) (z int) {
	{
	}
} /* ERROR "missing return" */

// if statements
func _(x, y int) (z int) {
	if x < y { return }
	return 1
}

func _(x, y int) (z int) {
	if x < y { return }
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	if x < y {
	} else { return 1
	}
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	if x < y { return
	} else { return
	}
}

// for statements
func _(x, y int) (z int) {
	for x < y {
		return
	}
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	for {
		return
	}
}

func _(x, y int) (z int) {
	for {
		return
		break
	}
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	for {
		for { break }
		return
	}
}

func _(x, y int) (z int) {
L:	for {
		for { break L }
		return
	}
} /* ERROR "missing return" */

// switch statements
func _(x, y int) (z int) {
	switch x {
	case 0: return
	default: return
	}
}

func _(x, y int) (z int) {
	switch x {
	case 0: return
	}
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	switch x {
	case 0: return
	case 1: break
	}
} /* ERROR "missing return" */

func _(x, y int) (z int) {
	switch x {
	case 0: return
	default:
		switch y {
		case 0: break
		}
		panic(0)
	}
}

func _(x, y int) (z int) {
L:	switch x {
	case 0: return
	default:
		switch y {
		case 0: break L
		}
		panic(0)
	}
} /* ERROR "missing return" */

// select statements
func _(ch chan int) (z int) {
	select {}
} // nice!

func _(ch chan int) (z int) {
	select {
	default: break
	}
} /* ERROR "missing return" */

func _(ch chan int) (z int) {
	select {
	case <-ch: return
	default: break
	}
} /* ERROR "missing return" */

func _(ch chan int) (z int) {
	select {
	case <-ch: return
	default:
		for i := 0; i < 10; i++ {
			break
		}
		return
	}
}

func _(ch chan int) (z int) {
L:	select {
	case <-ch: return
	default:
		for i := 0; i < 10; i++ {
			break L
		}
		return
	}
} /* ERROR "missing return" */
