summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-07-27 17:58:25 -0700
committerRuss Cox <rsc@golang.org>2009-07-27 17:58:25 -0700
commit66ac61963af82a9df17e044aba731a9a947f0007 (patch)
treee8841fdf0ab9463421e18ae8fbb5bdc54c017e3c
parent9373126645c1900bcf5b48ef0baaac2f4c91e96a (diff)
downloadgolang-66ac61963af82a9df17e044aba731a9a947f0007.tar.gz
constant keys for array initializers
R=ken OCL=32261 CL=32261
-rw-r--r--src/cmd/gc/sinit.c3
-rw-r--r--src/cmd/gc/walk.c2
-rw-r--r--test/fixedbugs/bug176.go14
3 files changed, 18 insertions, 1 deletions
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c
index e0581e64c..e41d11584 100644
--- a/src/cmd/gc/sinit.c
+++ b/src/cmd/gc/sinit.c
@@ -458,6 +458,9 @@ initfix(NodeList *l)
if(0)
return xxx.list;
+ if(nerrors != 0)
+ return xxx.list;
+
// look for the copy-out reference
for(l=xxx.list; l; l=l->next) {
r = l->n;
diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c
index 31b52434a..a97ea7231 100644
--- a/src/cmd/gc/walk.c
+++ b/src/cmd/gc/walk.c
@@ -4534,7 +4534,7 @@ arraylit(Node *n, Node *var, NodeList **init)
if(r->op == OKEY) {
b = nonnegconst(r->left);
if(b < 0) {
- yyerror("array index must be non-negative integer");
+ yyerror("array index must be non-negative constant");
break;
}
r = r->right;
diff --git a/test/fixedbugs/bug176.go b/test/fixedbugs/bug176.go
new file mode 100644
index 000000000..5820df308
--- /dev/null
+++ b/test/fixedbugs/bug176.go
@@ -0,0 +1,14 @@
+// errchk $G $D/$F.go
+
+// Copyright 2009 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.
+
+package main
+
+var x int
+
+var a = []int{ x: 1} // ERROR "constant"
+var b = [...]int{ x : 1} // ERROR "constant"
+var c = map[int]int{ x: 1}
+