diff --git a/src/cmd/gc/typecheck.c b/src/cmd/gc/typecheck.c index 85a63124ae1..39e57740482 100644 --- a/src/cmd/gc/typecheck.c +++ b/src/cmd/gc/typecheck.c @@ -1781,6 +1781,11 @@ typecheckcomplit(Node **np) typecheck(&l->right, Erv); continue; } + // Sym might have resolved to name in other top-level + // package, because of import dot. Redirect to correct sym + // before we do the lookup. + if(s->pkg != localpkg) + s = lookup(s->name); l->left = newname(s); l->left->typecheck = 1; f = lookdot1(s, t, t->type, 0); diff --git a/test/fixedbugs/bug295.go b/test/fixedbugs/bug295.go new file mode 100644 index 00000000000..fec2351f31b --- /dev/null +++ b/test/fixedbugs/bug295.go @@ -0,0 +1,17 @@ +// $G $D/$F.go && $L $F.$A && ./$A.out + +// Copyright 2010 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 + +import . "testing" // defines top-level T + +type S struct { + T int +} + +func main() { + _ = &S{T: 1} // should work +}