// $G $D/$F.go || echo BUG should compile

// 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

type myMap map[string] int;

func f() myMap {
	m := make(map[string] int);
	return m
}

func main() {
	m := make(myMap);
	mp := &m;

	{
		x, ok := m["key"];
		_, _ = x, ok;
	}
	{
		x, ok := (*mp)["key"];
		_, _ = x, ok;
	}
	{
		x, ok := f()["key"];
		_, _ = x, ok;
	}
	{
		var x int;
		var ok bool;
		x, ok = f()["key"];
		_, _ = x, ok;
	}
}

/*
 * bug143.go:19: assignment count mismatch: 2 = 1
 * bug143.go:18: x: undefined
 * bug143.go:18: ok: undefined
 */
