1
0
mirror of https://github.com/golang/go synced 2024-11-22 04:04:40 -07:00

gc: disallow declaration of variables outside package.

Fixes #2231.

Declaring main.i in package main in the same way already triggers syntax errors.

R=rsc
CC=golang-dev
https://golang.org/cl/5483078
This commit is contained in:
Luuk van Dijk 2012-01-10 11:18:56 +01:00
parent 556258e57b
commit 4bcc9c6b5e
2 changed files with 44 additions and 0 deletions

View File

@ -175,6 +175,11 @@ declare(Node *n, int ctxt)
n->lineno = parserline();
s = n->sym;
// kludgy: typecheckok means we're past parsing. Eg genwrapper may declare out of package names later.
if(importpkg == nil && !typecheckok && s->pkg != localpkg)
yyerror("cannot declare name %S", s);
gen = 0;
if(ctxt == PEXTERN) {
externdcl = list(externdcl, n);

39
test/fixedbugs/bug388.go Normal file
View File

@ -0,0 +1,39 @@
// errchk $G $D/$F.go
// Copyright 2011 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.
// Issue 2231
package main
import "runtime"
func foo(runtime.UintType, i int) { // ERROR "cannot declare name runtime.UintType"
println(i, runtime.UintType)
}
func bar(i int) {
runtime.UintType := i // ERROR "cannot declare name runtime.UintType"
println(runtime.UintType)
}
func baz() {
main.i := 1 // ERROR "non-name main.i"
println(main.i)
}
func qux() {
var main.i // ERROR "unexpected [.]"
println(main.i)
}
func corge() {
var foo.i int // ERROR "unexpected [.]"
println(foo.i)
}
func main() {
foo(42,43)
bar(1969)
}