Another (historic) artifact due to partially resolving symbols too early.
Fixes #13539.
Change-Id: Ie720c491cfa399599454f384b3a9735e75d4e8f1
Reviewed-on: https://go-review.googlesource.com/17600
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Damien Neil <dneil@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
// labelname ':' stmt
if labelOk {
// If we have a labelname, it was parsed by operand
- // (calling p.name()) and given an ONAME, ONONAME, or OTYPE node.
- if lhs.Op == ONAME || lhs.Op == ONONAME || lhs.Op == OTYPE {
+ // (calling p.name()) and given an ONAME, ONONAME, OTYPE, or OPACK node.
+ switch lhs.Op {
+ case ONAME, ONONAME, OTYPE, OPACK:
lhs = newname(lhs.Sym)
- } else {
+ default:
p.syntax_error("expecting semicolon or newline or }")
// we already progressed, no need to advance
}
--- /dev/null
+// errorcheck
+
+// Copyright 2015 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 a label named like a package is recognized
+// as a label rather than a package and that the package
+// remains unused.
+
+package main
+
+import "math" // ERROR "imported and not used"
+
+func main() {
+math:
+ for {
+ break math
+ }
+}