mirror of
https://github.com/golang/go
synced 2024-11-25 07:47:56 -07:00
check type of string/map/array index expressions
R=ken OCL=34478 CL=34480
This commit is contained in:
parent
83bdb805a2
commit
f4ee9f133c
@ -500,18 +500,24 @@ reswitch:
|
|||||||
|
|
||||||
case TARRAY:
|
case TARRAY:
|
||||||
defaultlit(&n->right, types[TUINT]);
|
defaultlit(&n->right, types[TUINT]);
|
||||||
|
if(n->right->type != T && !isint[n->right->type->etype])
|
||||||
|
yyerror("non-integer array index %#N", n->right);
|
||||||
n->type = t->type;
|
n->type = t->type;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TMAP:
|
case TMAP:
|
||||||
n->etype = 0;
|
n->etype = 0;
|
||||||
defaultlit(&n->right, t->down);
|
defaultlit(&n->right, t->down);
|
||||||
|
if(n->right->type != T && !eqtype(n->right->type, t->down))
|
||||||
|
yyerror("invalid map index %#N - need type %T", n->right, t->down);
|
||||||
n->type = t->type;
|
n->type = t->type;
|
||||||
n->op = OINDEXMAP;
|
n->op = OINDEXMAP;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TSTRING:
|
case TSTRING:
|
||||||
defaultlit(&n->right, types[TUINT]);
|
defaultlit(&n->right, types[TUINT]);
|
||||||
|
if(n->right->type != T && !isint[n->right->type->etype])
|
||||||
|
yyerror("non-integer string index %#N", n->right);
|
||||||
n->type = types[TUINT8];
|
n->type = types[TUINT8];
|
||||||
n->op = OINDEXSTR;
|
n->op = OINDEXSTR;
|
||||||
break;
|
break;
|
||||||
|
18
test/fixedbugs/bug205.go
Normal file
18
test/fixedbugs/bug205.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
// 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 t []int
|
||||||
|
var s string;
|
||||||
|
var m map[string]int;
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
println(t["hi"]); // ERROR "non-integer"
|
||||||
|
println(s["hi"]); // ERROR "non-integer"
|
||||||
|
println(m[0]); // ERROR "map index"
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user