diff options
author | Josh Bleecher Snyder <josharian@gmail.com> | 2015-07-20 15:39:14 -0700 |
---|---|---|
committer | Josh Bleecher Snyder <josharian@gmail.com> | 2015-07-23 00:45:26 +0000 |
commit | 61aa0953e542eb047f22905f84c7d627a35b8607 (patch) | |
tree | 9e588eb5f4ea26ca853a219d100e34001d3a257d /test/label1.go | |
parent | 3e7e519c367f4ab5b2d9f863302cd0946fe74800 (diff) | |
download | go-61aa0953e542eb047f22905f84c7d627a35b8607.tar.gz go-61aa0953e542eb047f22905f84c7d627a35b8607.zip |
[dev.ssa] cmd/compile: implement control flow handling
Add label and goto checks and improve test coverage.
Implement OSWITCH and OSELECT.
Implement OBREAK and OCONTINUE.
Allow generation of code in dead blocks.
Change-Id: Ibebb7c98b4b2344f46d38db7c9dce058c56beaac
Reviewed-on: https://go-review.googlesource.com/12445
Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'test/label1.go')
-rw-r--r-- | test/label1.go | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/test/label1.go b/test/label1.go index bc8fea6f6a..937b5cb900 100644 --- a/test/label1.go +++ b/test/label1.go @@ -31,11 +31,17 @@ L2: break L2 } if x == 1 { - continue L2 // ERROR "invalid continue label .*L2" + continue L2 // ERROR "invalid continue label .*L2|continue is not in a loop" } goto L2 } + for { + if x == 1 { + continue L2 // ERROR "invalid continue label .*L2" + } + } + L3: switch { case x > 10: @@ -43,7 +49,7 @@ L3: break L3 } if x == 12 { - continue L3 // ERROR "invalid continue label .*L3" + continue L3 // ERROR "invalid continue label .*L3|continue is not in a loop" } goto L3 } @@ -54,7 +60,7 @@ L4: break L4 // ERROR "invalid break label .*L4" } if x == 14 { - continue L4 // ERROR "invalid continue label .*L4" + continue L4 // ERROR "invalid continue label .*L4|continue is not in a loop" } if x == 15 { goto L4 @@ -67,7 +73,7 @@ L5: break L5 // ERROR "invalid break label .*L5" } if x == 17 { - continue L5 // ERROR "invalid continue label .*L5" + continue L5 // ERROR "invalid continue label .*L5|continue is not in a loop" } if x == 18 { goto L5 @@ -84,4 +90,21 @@ L5: goto L1 } } + + continue // ERROR "continue is not in a loop" + for { + continue on // ERROR "continue label not defined: on" + } + + break // ERROR "break is not in a loop" + for { + break dance // ERROR "break label not defined: dance" + } + + for { + switch x { + case 1: + continue + } + } } |