]> Cypherpunks repositories - gostls13.git/commitdiff
gc: fix m[x], _ = y.(T)
authorRuss Cox <rsc@golang.org>
Tue, 31 May 2011 19:52:04 +0000 (15:52 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 31 May 2011 19:52:04 +0000 (15:52 -0400)
Fixes #1900.

R=ken2
CC=golang-dev
https://golang.org/cl/4561053

src/cmd/gc/walk.c
test/fixedbugs/bug343.go [new file with mode: 0644]

index 68885e65969516b68fb9b8c7be1129d1e83b2847..70dc40759395aa7b930f2758eab4028af914bbad 100644 (file)
@@ -1532,7 +1532,7 @@ ascompatee(int op, NodeList *nl, NodeList *nr, NodeList **init)
 static int
 fncall(Node *l, Type *rt)
 {
-       if(l->ullman >= UINF)
+       if(l->ullman >= UINF || l->op == OINDEXMAP)
                return 1;
        if(eqtype(l->type, rt))
                return 0;
diff --git a/test/fixedbugs/bug343.go b/test/fixedbugs/bug343.go
new file mode 100644 (file)
index 0000000..efc87e3
--- /dev/null
@@ -0,0 +1,33 @@
+// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: bug343
+
+// 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 1900
+
+package main
+
+func getArgs(data map[string]interface{}, keys ...string) map[string]string {
+       ret := map[string]string{}
+       var ok bool
+       for _, k := range keys {
+               ret[k], ok = data[k].(string)
+               if !ok {}
+       }
+       return ret
+}
+
+func main() {
+       x := getArgs(map[string]interface{}{"x":"y"}, "x")
+       if x["x"] != "y" {
+               println("BUG bug343", x)
+       }
+}
+       
+
+/*
+typecheck [1008592b0]
+.   INDREG a(1) l(15) x(24) tc(2) runtime.ret G0 string
+bug343.go:15: internal compiler error: typecheck INDREG
+*/