mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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:
parent
560937434d
commit
c488548967
2 changed files with 24 additions and 3 deletions
|
|
@ -668,10 +668,11 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
|
||||||
// labelname ':' stmt
|
// labelname ':' stmt
|
||||||
if labelOk {
|
if labelOk {
|
||||||
// If we have a labelname, it was parsed by operand
|
// If we have a labelname, it was parsed by operand
|
||||||
// (calling p.name()) and given an ONAME, ONONAME, or OTYPE node.
|
// (calling p.name()) and given an ONAME, ONONAME, OTYPE, or OPACK node.
|
||||||
if lhs.Op == ONAME || lhs.Op == ONONAME || lhs.Op == OTYPE {
|
switch lhs.Op {
|
||||||
|
case ONAME, ONONAME, OTYPE, OPACK:
|
||||||
lhs = newname(lhs.Sym)
|
lhs = newname(lhs.Sym)
|
||||||
} else {
|
default:
|
||||||
p.syntax_error("expecting semicolon or newline or }")
|
p.syntax_error("expecting semicolon or newline or }")
|
||||||
// we already progressed, no need to advance
|
// we already progressed, no need to advance
|
||||||
}
|
}
|
||||||
|
|
|
||||||
20
test/fixedbugs/issue13539.go
Normal file
20
test/fixedbugs/issue13539.go
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue