| 
									
										
										
										
											2013-03-04 17:02:04 -05:00
										 |  |  | // errorcheck | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-10 14:32:26 -07:00
										 |  |  | // Copyright 2013 The Go Authors. All rights reserved. | 
					
						
							| 
									
										
										
										
											2013-03-04 17:02:04 -05:00
										 |  |  | // Use of this source code is governed by a BSD-style | 
					
						
							|  |  |  | // license that can be found in the LICENSE file. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Test compiler diagnosis of function missing return statements. | 
					
						
							|  |  |  | // See issue 65 and golang.org/s/go11return. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package p | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type T int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var x interface{} | 
					
						
							|  |  |  | var c chan int | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func external() int // ok | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // return is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // goto is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // panic is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // but only builtin panic | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	var panic = func(int) {} | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // adding more code - even though it is dead - now requires a return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // even an empty dead block triggers the message, because it | 
					
						
							|  |  |  | // becomes the final statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain with final else and all terminating is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 2 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain missing final else is not okay, even if the | 
					
						
							|  |  |  | // conditions cover every possible case. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x != nil { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 1 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that never break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that break are not okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for { break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if there's a condition - even "true" - the loops are no longer syntactically terminating | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for x == nil {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}	 | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for true {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // select in which all cases terminate and none break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any cases don't terminate, the select isn't okay anymore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the select, the select isn't okay anymore, even if they're dead | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select{ default: break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{ break L } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // type switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // again, but without the leading print(1). | 
					
						
							|  |  |  | // testing that everything works when the terminating statement is first. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // return is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // goto is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // panic is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // but only builtin panic | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	var panic = func(int) {} | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // adding more code - even though it is dead - now requires a return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // even an empty dead block triggers the message, because it | 
					
						
							|  |  |  | // becomes the final statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain with final else and all terminating is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 2 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain missing final else is not okay, even if the | 
					
						
							|  |  |  | // conditions cover every possible case. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x != nil { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 1 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that never break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that break are not okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if there's a condition - even "true" - the loops are no longer syntactically terminating | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for x == nil {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}	 | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for true {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // select in which all cases terminate and none break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any cases don't terminate, the select isn't okay anymore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the select, the select isn't okay anymore, even if they're dead | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select{ default: break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{ break L } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // type switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func _() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-07 11:31:01 -07:00
										 |  |  | func _() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int, float64: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-22 17:50:29 -04:00
										 |  |  | // again, with func literals | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // return is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // goto is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // panic is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // but only builtin panic | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	var panic = func(int) {} | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // adding more code - even though it is dead - now requires a return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // even an empty dead block triggers the message, because it | 
					
						
							|  |  |  | // becomes the final statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain with final else and all terminating is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 2 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain missing final else is not okay, even if the | 
					
						
							|  |  |  | // conditions cover every possible case. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x != nil { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 1 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that never break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that break are not okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for { break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if there's a condition - even "true" - the loops are no longer syntactically terminating | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for x == nil {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}	 | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	for true {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // select in which all cases terminate and none break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any cases don't terminate, the select isn't okay anymore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the select, the select isn't okay anymore, even if they're dead | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select{ default: break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{ break L } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(1) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // type switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	print(1) | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // again, but without the leading print(1). | 
					
						
							|  |  |  | // testing that everything works when the terminating statement is first. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // return is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // goto is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // panic is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // but only builtin panic | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	var panic = func(int) {} | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // block ending in terminating statement is okay | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // adding more code - even though it is dead - now requires a return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		print(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	print(3) | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // even an empty dead block triggers the message, because it | 
					
						
							|  |  |  | // becomes the final statement. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	return 2 | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	goto L | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	panic(2) | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 		{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		return 2 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	{} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain with final else and all terminating is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 2 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if-else chain missing final else is not okay, even if the | 
					
						
							|  |  |  | // conditions cover every possible case. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x != nil { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	if x == nil { | 
					
						
							|  |  |  | 		panic(2) | 
					
						
							|  |  |  | 	} else if x == 1 { | 
					
						
							|  |  |  | 		return 0 | 
					
						
							|  |  |  | 	} else if x != 1 { | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that never break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // for { loops that break are not okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	for { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if there's a condition - even "true" - the loops are no longer syntactically terminating | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for x == nil {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for x == nil { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}	 | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for true {} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	for true { | 
					
						
							|  |  |  | 		L: | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // select in which all cases terminate and none break are okay. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select{} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any cases don't terminate, the select isn't okay anymore | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		goto L | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the select, the select isn't okay anymore, even if they're dead | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select{ default: break } | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for{ break L } | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	case c <- 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	select { | 
					
						
							|  |  |  | 	case <-c: | 
					
						
							|  |  |  | 		panic("abc") | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		select{} | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	case 2: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x { | 
					
						
							|  |  |  | 	case 1: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // type switch with default in which all cases terminate is okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if no default or some case doesn't terminate, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch { | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case float64: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // if any breaks refer to the switch, switch is no longer okay | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 		break L | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 		break | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var _ = func() int { | 
					
						
							|  |  |  | L: | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	case int: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		for { | 
					
						
							|  |  |  | 			break L | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } // ERROR "missing return" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-07 11:31:01 -07:00
										 |  |  | var _ = func() int { | 
					
						
							|  |  |  | 	switch x.(type) { | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return 4 | 
					
						
							|  |  |  | 	case int, float64: | 
					
						
							|  |  |  | 		print(2) | 
					
						
							|  |  |  | 		panic(3) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-04 17:02:04 -05:00
										 |  |  | /**/ |