Commit 4bcc9c6b authored by Luuk van Dijk's avatar Luuk van Dijk

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
parent 556258e5
......@@ -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);
......
// 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)
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment