]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: say 'non-constant array bound' instead of 'invalid array bound'
authorRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 14:21:54 +0000 (10:21 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 16 Sep 2014 14:21:54 +0000 (10:21 -0400)
Fixes #8196.

LGTM=adonovan
R=adonovan
CC=golang-codereviews
https://golang.org/cl/141510044

src/cmd/gc/typecheck.c
test/fixedbugs/bug255.go

index 746feb4d1b544c6b9c507cd5c89a6c6362c024b1..18d20cdd16d27c9baeb56324f2ce5b1052b87b19 100644 (file)
@@ -408,7 +408,10 @@ reswitch:
                                v = toint(l->val);
                                break;
                        default:
-                               yyerror("invalid array bound %N", l);
+                               if(l->type != T && isint[l->type->etype] && l->op != OLITERAL)
+                                       yyerror("non-constant array bound %N", l);
+                               else
+                                       yyerror("invalid array bound %N", l);
                                goto error;
                        }
                        t->bound = mpgetfix(v.u.xval);
index acf4f23910d69f2a48f530c1744cd2aef6446c89..65ed1b8f6fd2381c4649f569356bfe6c43e59aa2 100644 (file)
@@ -6,10 +6,15 @@
 
 package main
 
-var a [10]int  // ok
-var b [1e1]int // ok
-var c [1.5]int // ERROR "truncated"
-var d ["abc"]int       // ERROR "invalid array bound|not numeric"
-var e [nil]int // ERROR "invalid array bound|not numeric"
-var f [e]int   // ERROR "invalid array bound|not constant"
-var g [1<<65]int       // ERROR "array bound is too large|overflows"
+var a [10]int      // ok
+var b [1e1]int     // ok
+var c [1.5]int     // ERROR "truncated"
+var d ["abc"]int   // ERROR "invalid array bound|not numeric"
+var e [nil]int     // ERROR "invalid array bound|not numeric"
+var f [e]int       // ERROR "invalid array bound|not constant"
+var g [1 << 65]int // ERROR "array bound is too large|overflows"
+var h [len(a)]int  // ok
+
+func ff() string
+
+var i [len([1]string{ff()})]int // ERROR "non-constant array bound|not constant"