diff options
author | R?my Oudompheng <oudomphe@phare.normalesup.org> | 2014-09-15 18:31:47 +0200 |
---|---|---|
committer | R?my Oudompheng <oudomphe@phare.normalesup.org> | 2014-09-15 18:31:47 +0200 |
commit | 40280c6f69bdccc21074257818fd4b37b5976679 (patch) | |
tree | 9f39a7c6ee84fb5bdb2b584d8c9f776cd90b7a13 /test | |
parent | cc2fa2c32eaa33fe704dbb4145ee545ba6135b71 (diff) | |
download | go-40280c6f69bdccc21074257818fd4b37b5976679.tar.gz |
cmd/gc: don't walk static nodes generated by anylit.
During anylit run, nodes such as SLICEARR(statictmp, [:])
may be generated and are expected to be found unchanged by
gen_as_init.
In some walks (in particular walkselect), the statement
may be walked again and lowered to its usual form, leading to a
crash.
Fixes issue 8017.
Fixes issue 8024.
Fixes issue 8058.
LGTM=rsc
R=golang-codereviews, dvyukov, gobot, rsc
CC=golang-codereviews
https://codereview.appspot.com/112080043
Diffstat (limited to 'test')
-rw-r--r-- | test/fixedbugs/issue8017.go | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/fixedbugs/issue8017.go b/test/fixedbugs/issue8017.go new file mode 100644 index 000000000..22056e08c --- /dev/null +++ b/test/fixedbugs/issue8017.go @@ -0,0 +1,26 @@ +// compile + +// Copyright 2014 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. + +// Issues 8017 and 8058: walk modifies nodes generated +// by slicelit and causes an internal error afterwards +// when gen_as_init parses it back. + +package main + +func F() { + var ch chan int + select { + case <-ch: + case <-make(chan int, len([2][]int{([][]int{})[len(ch)], []int{}})): + } +} + +func G() { + select { + case <-([1][]chan int{[]chan int{}})[0][0]: + default: + } +} |