aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/syntax/testdata
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2022-06-24 15:55:30 -0700
committerRobert Griesemer <gri@golang.org>2022-06-26 00:21:29 +0000
commit6b309be7ab7c17beb77c6e40b258278e7454d919 (patch)
tree3210248a9b11292976532e5f73697cf631e83779 /src/cmd/compile/internal/syntax/testdata
parent1821639b57a643f9c3f6d3b3d329d2283d5d7a57 (diff)
downloadgo-6b309be7ab7c17beb77c6e40b258278e7454d919.tar.xz
cmd/compile/internal/syntax: check fallthrough in CheckBranches mode
The parser CheckBranches mode checked correct use of break, continue, and labels, but not of fallthrough statements. This CL adds checking of fallthrough statements as well. For #51456. Change-Id: I5000388011973724f80c59a6aaf015e3bb70faea Reviewed-on: https://go-review.googlesource.com/c/go/+/414134 Reviewed-by: Robert Griesemer <gri@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/cmd/compile/internal/syntax/testdata')
-rw-r--r--src/cmd/compile/internal/syntax/testdata/fallthrough.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/syntax/testdata/fallthrough.go b/src/cmd/compile/internal/syntax/testdata/fallthrough.go
new file mode 100644
index 0000000000..851da81ea0
--- /dev/null
+++ b/src/cmd/compile/internal/syntax/testdata/fallthrough.go
@@ -0,0 +1,55 @@
+// Copyright 2022 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.
+
+package fallthroughs
+
+func _() {
+ var x int
+ switch x {
+ case 0:
+ fallthrough
+
+ case 1:
+ fallthrough // ERROR fallthrough statement out of place
+ {
+ }
+
+ case 2:
+ {
+ fallthrough // ERROR fallthrough statement out of place
+ }
+
+ case 3:
+ for {
+ fallthrough // ERROR fallthrough statement out of place
+ }
+
+ case 4:
+ fallthrough // trailing empty statements are ok
+ ;
+ ;
+
+ case 5:
+ fallthrough
+
+ default:
+ fallthrough // ERROR cannot fallthrough final case in switch
+ }
+
+ fallthrough // ERROR fallthrough statement out of place
+
+ if true {
+ fallthrough // ERROR fallthrough statement out of place
+ }
+
+ for {
+ fallthrough // ERROR fallthrough statement out of place
+ }
+
+ var t any
+ switch t.(type) {
+ case int:
+ fallthrough // ERROR cannot fallthrough in type switch
+ }
+}