URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [fixedbugs/] [bug320.go] - Rev 700
Compare with Previous | Blame | View Log
// $G $D/$F.go && $L $F.$A && ./$A.out// 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 mainfunc main() {c := make(chan int, 1)dummy := make(chan int)v := 0x12345678for i := 0; i < 10; i++ {// 6g had a bug that caused select to pass &t to// selectrecv before allocating the memory for t,// which caused non-deterministic crashes.// This test looks for the bug by checking that the// value received actually ends up in t.// If the allocation happens after storing through// whatever garbage &t holds, the later reference// to t in the case body will use the new pointer and// not see the received value.v += 0x1020304c <- vselect {case t := <-c:go func() {f(t)}()escape(&t)if t != v {println(i, v, t)panic("wrong values")}case dummy <- 1:}}}func escape(*int) {}func f(int) {}
