mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
They will be deleted from their current homes once this has landed. Changes made to import paths to make the code compile, and to find errchk in the right place in cmd/vet's Makefile. TODO in a later CL: tidy up vet. R=golang-dev, gri CC=golang-dev https://golang.org/cl/9495043
2122 lines
23 KiB
Go
2122 lines
23 KiB
Go
// Copyright 2013 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build vet_test
|
|
// +build ignore
|
|
|
|
// This file contains tests for the dead code checker.
|
|
|
|
package main
|
|
|
|
type T int
|
|
|
|
var x interface{}
|
|
var c chan int
|
|
|
|
func external() int // ok
|
|
|
|
func _() int {
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// but only builtin panic
|
|
func _() int {
|
|
var panic = func(int) {}
|
|
print(1)
|
|
panic(2)
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else {
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else {
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
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
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else if x == 1 {
|
|
return 0
|
|
} else if x != 1 {
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
for {
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
for {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
for {
|
|
for {
|
|
break
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
for {
|
|
for {
|
|
continue
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
for {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
for {
|
|
break
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
for {
|
|
for {
|
|
}
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
for {
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
for x == nil {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
for x == nil {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
for x == nil {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
for true {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
for true {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
for true {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
case c <- 1:
|
|
print(2)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
case c <- 1:
|
|
print(2)
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
select {}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
default:
|
|
select {}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
goto L // ERROR "unreachable code"
|
|
case c <- 1:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
default:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
default:
|
|
break
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
case c <- 1:
|
|
print(2)
|
|
break L
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(1)
|
|
panic("abc")
|
|
default:
|
|
select {}
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
case 2:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 2:
|
|
return 4
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
case 2:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
break L // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
break // ERROR "unreachable code"
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
case float64:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case float64:
|
|
return 4
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
case float64:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
break L // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
break // ERROR "unreachable code"
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
print(1)
|
|
L:
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
// again, but without the leading print(1).
|
|
// testing that everything works when the terminating statement is first.
|
|
|
|
func _() int {
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// but only builtin panic
|
|
func _() int {
|
|
var panic = func(int) {}
|
|
panic(2)
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
return 2
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
panic(2)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
func _() int {
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
return 2
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
L:
|
|
{
|
|
goto L
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
func _() int {
|
|
{
|
|
panic(2)
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
// again, with func literals
|
|
|
|
var _ = func() int {
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// but only builtin panic
|
|
var _ = func() int {
|
|
var panic = func(int) {}
|
|
print(1)
|
|
panic(2)
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
print(1)
|
|
return 2
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
print(1)
|
|
goto L
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
{
|
|
panic(2)
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else {
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else {
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
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
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
if x == nil {
|
|
panic(2)
|
|
} else if x == 1 {
|
|
return 0
|
|
} else if x != 1 {
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
for {
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
for {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
for {
|
|
for {
|
|
break
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
for {
|
|
for {
|
|
continue
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
for {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
for {
|
|
break
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
for {
|
|
for {
|
|
}
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
for {
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
for x == nil {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
for x == nil {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
for x == nil {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
for true {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
for true {
|
|
for {
|
|
break
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
for true {
|
|
L:
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
case c <- 1:
|
|
print(2)
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
case c <- 1:
|
|
print(2)
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
select {}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
default:
|
|
select {}
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
goto L // ERROR "unreachable code"
|
|
case c <- 1:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
default:
|
|
print(2)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
default:
|
|
break
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
select {
|
|
case <-c:
|
|
print(2)
|
|
panic("abc")
|
|
case c <- 1:
|
|
print(2)
|
|
break L
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
select {
|
|
case <-c:
|
|
print(1)
|
|
panic("abc")
|
|
default:
|
|
select {}
|
|
break // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
case 2:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 2:
|
|
return 4
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
fallthrough
|
|
case 2:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
break L // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x {
|
|
default:
|
|
return 4
|
|
break // ERROR "unreachable code"
|
|
case 1:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
switch x {
|
|
case 1:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch {
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
case float64:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case float64:
|
|
return 4
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
fallthrough
|
|
case float64:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
break L // ERROR "unreachable code"
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
switch x.(type) {
|
|
default:
|
|
return 4
|
|
break // ERROR "unreachable code"
|
|
case int:
|
|
print(2)
|
|
panic(3)
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
print(1)
|
|
L:
|
|
switch x.(type) {
|
|
case int:
|
|
print(2)
|
|
for {
|
|
break L
|
|
}
|
|
default:
|
|
return 4
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
// again, but without the leading print(1).
|
|
// testing that everything works when the terminating statement is first.
|
|
|
|
var _ = func() int {
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
// but only builtin panic
|
|
var _ = func() int {
|
|
var panic = func(int) {}
|
|
panic(2)
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
return 2
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
return 2
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
goto L
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
goto L
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
panic(2)
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
panic(2)
|
|
}
|
|
println() // ERROR "unreachable code"
|
|
}
|
|
|
|
var _ = func() int {
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
return 2
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
goto L
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
panic(2)
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
return 2
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
L:
|
|
{
|
|
goto L
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|
|
|
|
var _ = func() int {
|
|
{
|
|
panic(2)
|
|
}
|
|
{ // ERROR "unreachable code"
|
|
}
|
|
println() // ok
|
|
}
|