mirror of
https://github.com/golang/go
synced 2024-09-23 17:20:13 -06: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);
|
setlineno(last);
|
||||||
yyerror("cannot fallthrough in type switch");
|
yyerror("cannot fallthrough in type switch");
|
||||||
}
|
}
|
||||||
|
if(l->next == nil) {
|
||||||
|
setlineno(last);
|
||||||
|
yyerror("cannot fallthrough final case in switch");
|
||||||
|
}
|
||||||
last->op = OFALL;
|
last->op = OFALL;
|
||||||
} else
|
} else
|
||||||
stat = list(stat, br);
|
stat = list(stat, br);
|
||||||
|
@ -392,15 +392,6 @@ func main() {
|
|||||||
}
|
}
|
||||||
assert(count == 2, "fail")
|
assert(count == 2, "fail")
|
||||||
|
|
||||||
// fallthrough in final case.
|
|
||||||
count = 0
|
|
||||||
switch i5 {
|
|
||||||
case 5:
|
|
||||||
count++
|
|
||||||
fallthrough
|
|
||||||
}
|
|
||||||
assert(count == 1, "fail")
|
|
||||||
|
|
||||||
i := 0
|
i := 0
|
||||||
switch x := 5; {
|
switch x := 5; {
|
||||||
case i < x:
|
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