]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: don't permit declarations in post statement of for loop
authorRobert Griesemer <gri@golang.org>
Mon, 20 Mar 2017 18:36:15 +0000 (11:36 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 20 Mar 2017 20:02:34 +0000 (20:02 +0000)
Report syntax error that was missed when moving to new parser.

Fixes #19610.

Change-Id: Ie5625f907a84089dc56fcccfd4f24df546042783
Reviewed-on: https://go-review.googlesource.com/38375
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/syntax/parser.go
test/fixedbugs/issue19610.go [new file with mode: 0644]

index 48a02e716f977cfc0e00b54f39ea2a125741770e..66987bbfd7476749a3423c53bec3c65714402485 100644 (file)
@@ -1722,6 +1722,9 @@ func (p *parser) header(keyword token) (init SimpleStmt, cond Expr, post SimpleS
                        p.want(_Semi)
                        if p.tok != _Lbrace {
                                post = p.simpleStmt(nil, false)
+                               if a, _ := post.(*AssignStmt); a != nil && a.Op == Def {
+                                       p.syntax_error_at(a.Pos(), "cannot declare in post statement of for loop")
+                               }
                        }
                } else if p.tok != _Lbrace {
                        condStmt = p.simpleStmt(nil, false)
diff --git a/test/fixedbugs/issue19610.go b/test/fixedbugs/issue19610.go
new file mode 100644 (file)
index 0000000..01beda3
--- /dev/null
@@ -0,0 +1,14 @@
+// errorcheck
+
+// Copyright 2017 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 main
+
+func main() {
+       for ; ; x := 1 { // ERROR "cannot declare in post statement"
+               _ = x
+               break
+       }
+}