mirror of
https://github.com/golang/go
synced 2024-11-25 08:27:57 -07:00
cmd/gc: disallow fallthrough in final case of switch
Small change to cmd/gc to catch a "fallthrough" in the final case of a switch. R=golang-dev, rsc, mtj CC=golang-dev https://golang.org/cl/7841043
This commit is contained in:
parent
d94da6fab5
commit
f6a952599e
@ -322,6 +322,10 @@ casebody(Node *sw, Node *typeswvar)
|
||||
setlineno(last);
|
||||
yyerror("cannot fallthrough in type switch");
|
||||
}
|
||||
if(l->next == nil) {
|
||||
setlineno(last);
|
||||
yyerror("cannot fallthrough final case in switch");
|
||||
}
|
||||
last->op = OFALL;
|
||||
} else
|
||||
stat = list(stat, br);
|
||||
|
@ -392,15 +392,6 @@ func main() {
|
||||
}
|
||||
assert(count == 2, "fail")
|
||||
|
||||
// fallthrough in final case.
|
||||
count = 0
|
||||
switch i5 {
|
||||
case 5:
|
||||
count++
|
||||
fallthrough
|
||||
}
|
||||
assert(count == 1, "fail")
|
||||
|
||||
i := 0
|
||||
switch x := 5; {
|
||||
case i < x:
|
||||
|
36
test/switch4.go
Normal file
36
test/switch4.go
Normal file
@ -0,0 +1,36 @@
|
||||
// errorcheck
|
||||
|
||||
// Copyright 2011 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.
|
||||
|
||||
// Verify that erroneous switch statements are detected by the compiler.
|
||||
// Does not compile.
|
||||
|
||||
package main
|
||||
|
||||
type I interface {
|
||||
M()
|
||||
}
|
||||
|
||||
func bad() {
|
||||
|
||||
i5 := 5
|
||||
switch i5 {
|
||||
case 5:
|
||||
fallthrough // ERROR "cannot fallthrough final case in switch"
|
||||
}
|
||||
}
|
||||
|
||||
func good() {
|
||||
var i interface{}
|
||||
var s string
|
||||
|
||||
switch i {
|
||||
case s:
|
||||
}
|
||||
|
||||
switch s {
|
||||
case i:
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user