From 15dcdf751cfd9f075c3071b3ca1d5303334f2694 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 31 May 2011 15:52:04 -0400 Subject: [PATCH] gc: fix m[x], _ = y.(T) Fixes #1900. R=ken2 CC=golang-dev https://golang.org/cl/4561053 --- src/cmd/gc/walk.c | 2 +- test/fixedbugs/bug343.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/bug343.go diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index 68885e6596..70dc407593 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -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 index 0000000000..efc87e3d7a --- /dev/null +++ b/test/fixedbugs/bug343.go @@ -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 +*/ -- 2.48.1