mirror of
https://github.com/golang/go
synced 2024-11-23 18:40:03 -07:00
68e390304e
This re-enables functionality that inadvertently was disabled in the (long) past. Also, don't perform branch checks if we had errors in a function to avoid spurious errors or (worst-case) crashes. Slightly modified test/fixedbugs/issue14006.go to make sure the test still reports invalid label errors (the surrounding function must be syntactically correct). Change-Id: Id5642930877d7cf3400649094ec75c753b5084b7 Reviewed-on: https://go-review.googlesource.com/69770 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
67 lines
1.0 KiB
Go
67 lines
1.0 KiB
Go
// errorcheck
|
|
|
|
// Copyright 2016 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.
|
|
|
|
// Literals that happen to resolve to named constants
|
|
// may be used as label names (see issue 13684). Make
|
|
// sure that other literals don't crash the compiler.
|
|
|
|
package main
|
|
|
|
const labelname = 1
|
|
|
|
func main() {
|
|
goto labelname
|
|
labelname:
|
|
}
|
|
|
|
func f() {
|
|
var x int
|
|
switch x {
|
|
case 1:
|
|
2: // ERROR "unexpected :"
|
|
case 2:
|
|
}
|
|
|
|
switch x {
|
|
case 1:
|
|
2: ; // ERROR "unexpected :"
|
|
case 2:
|
|
}
|
|
|
|
var y string
|
|
switch y {
|
|
case "foo":
|
|
"bar": // ERROR "unexpected :"
|
|
case "bar":
|
|
}
|
|
|
|
switch y {
|
|
case "foo":
|
|
"bar": ; // ERROR "unexpected :"
|
|
case "bar":
|
|
}
|
|
|
|
var z bool
|
|
switch {
|
|
case z:
|
|
labelname: // ERROR "missing statement after label"
|
|
case false:
|
|
}
|
|
}
|
|
|
|
func g() {
|
|
var z bool
|
|
switch {
|
|
case z:
|
|
labelname: // ERROR "label labelname defined and not used"
|
|
}
|
|
|
|
switch {
|
|
case z:
|
|
labelname: ; // ERROR "label labelname already defined at LINE-5"
|
|
case false:
|
|
}
|
|
} |