1
0
mirror of https://github.com/golang/go synced 2024-11-24 05:10:19 -07:00

gc: composite literal double eval bug

Fixes #2086.

R=ken2
CC=golang-dev
https://golang.org/cl/4803055
This commit is contained in:
Russ Cox 2011-07-27 18:55:30 -04:00
parent 5ea413e2a0
commit f91eb3c2f9
3 changed files with 28 additions and 2 deletions

View File

@ -189,7 +189,7 @@ compactframe(Prog* ptxt)
continue;
w = n->type->width;
if((w >= MAXWIDTH) || (w < 0))
if(w >= MAXWIDTH || w < 0)
fatal("bad width");
stksize += w;
stksize = rnd(stksize, n->type->align);

View File

@ -686,7 +686,7 @@ anylit(int ctxt, Node *n, Node *var, NodeList **init)
if(ctxt == 0) {
// lay out static data
vstat = staticname(t, ctxt);
structlit(1, 1, n, vstat, init);
structlit(ctxt, 1, n, vstat, init);
// copy static to var
a = nod(OAS, var, vstat);

26
test/fixedbugs/bug354.go Normal file
View File

@ -0,0 +1,26 @@
// $G $D/$F.go || echo BUG: bug354
// 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 2086
// was calling makeclosure twice on the closure
package main
import (
"os"
)
type Inner struct {
F func() os.Error
}
type Outer struct {
Inners []Inner
}
// calls makeclosure twice on same closure
var Foo = Outer{[]Inner{Inner{func() os.Error{ return nil }}}}