// 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 :|expected .*;.* or .*}.* or newline|value computed is not used" case 2: } switch x { case 1: 2: ; // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used" case 2: } var y string switch y { case "foo": "bar": // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used" case "bar": } switch y { case "foo": "bar": ; // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used" 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|previous definition|defined and not used" } switch { case z: labelname: ; // ERROR "label labelname already defined at LINE-5|label .*labelname.* already defined" case false: } }