diff --git a/go/types/stmt.go b/go/types/stmt.go index 4851b01f..bca5ce80 100644 --- a/go/types/stmt.go +++ b/go/types/stmt.go @@ -511,18 +511,18 @@ func (check *checker) stmt(ctxt stmtContext, s ast.Stmt) { switch typ := x.typ.Underlying().(type) { case *Basic: if isString(typ) { - key = Typ[UntypedInt] - val = Typ[UntypedRune] + key = Typ[Int] + val = Typ[Rune] } case *Array: - key = Typ[UntypedInt] + key = Typ[Int] val = typ.elt case *Slice: - key = Typ[UntypedInt] + key = Typ[Int] val = typ.elt case *Pointer: if typ, _ := typ.base.Underlying().(*Array); typ != nil { - key = Typ[UntypedInt] + key = Typ[Int] val = typ.elt } case *Map: diff --git a/go/types/testdata/stmt0.src b/go/types/testdata/stmt0.src index c4770988..19394114 100644 --- a/go/types/testdata/stmt0.src +++ b/go/types/testdata/stmt0.src @@ -507,7 +507,7 @@ func typeswitch2() { } } -func rangeloops() { +func rangeloops1() { var ( x int a [10]float32 @@ -612,6 +612,26 @@ func rangeloops() { } } +func rangeloops2() { + type I int + type R rune + + var a [10]int + var i I + _ = i + for i /* ERROR cannot assign */ = range a {} + for i /* ERROR cannot assign */ = range &a {} + for i /* ERROR cannot assign */ = range a[:] {} + + var s string + var r R + _ = r + for i /* ERROR cannot assign */ = range s {} + for i /* ERROR cannot assign */ = range "foo" {} + for _, r /* ERROR cannot assign */ = range s {} + for _, r /* ERROR cannot assign */ = range "foo" {} +} + func labels0() { goto L0 goto L1