// 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: | |
} | |
switch { | |
case z: | |
labelname: | |
} | |
switch { | |
case z: | |
labelname: ; | |
case false: | |
} | |
} |