diff options
author | Luuk van Dijk <lvd@golang.org> | 2011-12-14 15:54:10 +0100 |
---|---|---|
committer | Luuk van Dijk <lvd@golang.org> | 2011-12-14 15:54:10 +0100 |
commit | 1f6d130b14054f57a530dce20b19a79a55c4fc0d (patch) | |
tree | a285d20290a1b72593b0101636c0c85508451f4f | |
parent | a62722bba4e7ccfe2ebfae4a5702c17e0a64937d (diff) | |
download | go-1f6d130b14054f57a530dce20b19a79a55c4fc0d.tar.gz go-1f6d130b14054f57a530dce20b19a79a55c4fc0d.zip |
gc: add forgotten typecheck in a lonely corner of sinit
Fixes #2549
R=rsc
CC=golang-dev
https://golang.org/cl/5484060
-rw-r--r-- | src/cmd/gc/sinit.c | 7 | ||||
-rw-r--r-- | test/fixedbugs/bug387.go | 30 |
2 files changed, 34 insertions, 3 deletions
diff --git a/src/cmd/gc/sinit.c b/src/cmd/gc/sinit.c index 8798d2136b..73a0af799e 100644 --- a/src/cmd/gc/sinit.c +++ b/src/cmd/gc/sinit.c @@ -707,9 +707,10 @@ slicelit(int ctxt, Node *n, Node *var, NodeList **init) // set auto to point at new temp or heap (3 assign) if(n->esc == EscNone) { - a = temp(t); - *init = list(*init, nod(OAS, a, N)); // zero new temp - a = nod(OADDR, a, N); + a = nod(OAS, temp(t), N); + typecheck(&a, Etop); + *init = list(*init, a); // zero new temp + a = nod(OADDR, a->left, N); } else { a = nod(ONEW, N, N); a->list = list1(typenod(t)); diff --git a/test/fixedbugs/bug387.go b/test/fixedbugs/bug387.go new file mode 100644 index 0000000000..c9db4aea89 --- /dev/null +++ b/test/fixedbugs/bug387.go @@ -0,0 +1,30 @@ +// $G $D/$F.go || echo "Bug387" + +// 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 2549 + +/* Used to die with +missing typecheck: [7f5bf07b4438] + +. AS l(45) +. . NAME-main.autotmp_0017 u(1) a(1) l(45) x(0+0) class(PAUTO) +esc(N) tc(1) used(1) ARRAY-[2]string +internal compiler error: missing typecheck +*/ +package main + +import ( + "fmt" + "path/filepath" +) + +func main() { + switch _, err := filepath.Glob(filepath.Join(".", "vnc")); { + case err != nil: + fmt.Println(err) + } +} + |