diff --git a/src/cmd/5g/cgen.c b/src/cmd/5g/cgen.c index 032409baee3d6b7657843d7fcffccf55c63ecd9f..e0fc7682151b8c3292e6fa818db31e9ff1f09129 100644 --- a/src/cmd/5g/cgen.c +++ b/src/cmd/5g/cgen.c @@ -43,6 +43,8 @@ cgen(Node *n, Node *res) } if(isfat(n->type)) { + if(n->type->width < 0) + fatal("forgot to compute width for %T", n->type); sgen(n, res, n->type->width); goto ret; } diff --git a/src/cmd/6g/cgen.c b/src/cmd/6g/cgen.c index 47f3374f530201081d4ea4ae16b28602125b80bc..048174e0869efc10c6038dd4576fd24f50f7d38c 100644 --- a/src/cmd/6g/cgen.c +++ b/src/cmd/6g/cgen.c @@ -47,6 +47,8 @@ cgen(Node *n, Node *res) } if(isfat(n->type)) { + if(n->type->width < 0) + fatal("forgot to compute width for %T", n->type); sgen(n, res, n->type->width); goto ret; } diff --git a/src/cmd/8g/cgen.c b/src/cmd/8g/cgen.c index 9c326e8ef1a95e27c63c05d4dafec1b5ef9344fa..036188fec4a7085253ae1e34771dcfaf75ef204f 100644 --- a/src/cmd/8g/cgen.c +++ b/src/cmd/8g/cgen.c @@ -78,6 +78,8 @@ cgen(Node *n, Node *res) // structs etc get handled specially if(isfat(n->type)) { + if(n->type->width < 0) + fatal("forgot to compute width for %T", n->type); sgen(n, res, n->type->width); return; } diff --git a/src/cmd/gc/dcl.c b/src/cmd/gc/dcl.c index bf164b3f43d80aece4ea8897acb37a44f30e675f..80cb74408adc8dc93ea0cd39e455044aa763bf08 100644 --- a/src/cmd/gc/dcl.c +++ b/src/cmd/gc/dcl.c @@ -684,6 +684,10 @@ ok: pt->nod = n; pt->sym = n->sym; pt->sym->lastlineno = parserline(); + pt->siggen = 0; + pt->printed = 0; + pt->deferwidth = 0; + pt->local = 0; declare(n, PEXTERN); checkwidth(pt); diff --git a/src/cmd/gc/walk.c b/src/cmd/gc/walk.c index ae556ae3fb1ee144e8ec98c8bf28eca963bbb42d..bee3c25b0ddd7aa65d43c4fd80d128a1a8b3473d 100644 --- a/src/cmd/gc/walk.c +++ b/src/cmd/gc/walk.c @@ -142,7 +142,9 @@ walkdeftype(Node *n) } // copy new type and clear fields - // that don't come along + // that don't come along. + // anything zeroed here must be zeroed in + // typedcl2 too. maplineno = n->type->maplineno; embedlineno = n->type->embedlineno; *n->type = *t; diff --git a/test/fixedbugs/bug335.dir/a.go b/test/fixedbugs/bug335.dir/a.go new file mode 100644 index 0000000000000000000000000000000000000000..5a8112a9de33faf7a885a92856ed47024f6cbee2 --- /dev/null +++ b/test/fixedbugs/bug335.dir/a.go @@ -0,0 +1,9 @@ +// 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. + +package a + +import "./b" + +var Bar = b.Foo diff --git a/test/fixedbugs/bug335.dir/b.go b/test/fixedbugs/bug335.dir/b.go new file mode 100644 index 0000000000000000000000000000000000000000..7428c2a918a4ccb62d5ad4379d3a10b2ca315cbb --- /dev/null +++ b/test/fixedbugs/bug335.dir/b.go @@ -0,0 +1,11 @@ +// 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. + +package b + +type T interface{} + +func f() T { return nil } + +var Foo T = f() diff --git a/test/fixedbugs/bug335.go b/test/fixedbugs/bug335.go new file mode 100644 index 0000000000000000000000000000000000000000..915b746578ccbe3ba7d895a49c16f6c6baab4cd5 --- /dev/null +++ b/test/fixedbugs/bug335.go @@ -0,0 +1,10 @@ +// $G $D/$F.dir/b.go && $G $D/$F.dir/a.go +// rm -f a.$A b.$A + +// 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 1705. + +unused (see script at top of file)