1
0
mirror of https://github.com/golang/go synced 2024-11-11 20:50:23 -07:00

cmd/compile: recognize labels even if they have the same name as packages

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>
This commit is contained in:
Robert Griesemer 2015-12-08 17:23:23 -08:00
parent 560937434d
commit c488548967
2 changed files with 24 additions and 3 deletions

View File

@ -668,10 +668,11 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
// 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
}

View File

@ -0,0 +1,20 @@
// 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
}
}