mirror of
https://github.com/golang/go
synced 2024-11-22 07:14:40 -07:00
gc: fix send precedence
Test and fix case found by Robert. Add receive inside send to tree too. R=ken2 CC=golang-dev https://golang.org/cl/3973052
This commit is contained in:
parent
5887ef7571
commit
0e47460915
@ -93,9 +93,10 @@ static void fixlbrace(int);
|
|||||||
%type <type> hidden_type_func
|
%type <type> hidden_type_func
|
||||||
%type <type> hidden_type_recv_chan hidden_type_non_recv_chan
|
%type <type> hidden_type_recv_chan hidden_type_non_recv_chan
|
||||||
|
|
||||||
|
%left LCOMM /* outside the usual hierarchy; here for good error messages */
|
||||||
|
|
||||||
%left LOROR
|
%left LOROR
|
||||||
%left LANDAND
|
%left LANDAND
|
||||||
%left LCOMM
|
|
||||||
%left LEQ LNE LLE LGE LLT LGT
|
%left LEQ LNE LLE LGE LLT LGT
|
||||||
%left '+' '-' '|' '^'
|
%left '+' '-' '|' '^'
|
||||||
%left '*' '/' '%' '&' LLSH LRSH LANDNOT
|
%left '*' '/' '%' '&' LLSH LRSH LANDNOT
|
||||||
|
37
test/chan/sendstmt.go
Normal file
37
test/chan/sendstmt.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
// $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.
|
||||||
|
|
||||||
|
// Test various parsing cases that are a little
|
||||||
|
// different now that send is a statement, not a expression.
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
chanchan()
|
||||||
|
sendprec()
|
||||||
|
}
|
||||||
|
|
||||||
|
func chanchan() {
|
||||||
|
cc := make(chan chan int, 1)
|
||||||
|
c := make(chan int, 1)
|
||||||
|
cc <- c
|
||||||
|
select {
|
||||||
|
case <-cc <- 2:
|
||||||
|
default:
|
||||||
|
panic("nonblock")
|
||||||
|
}
|
||||||
|
if <-c != 2 {
|
||||||
|
panic("bad receive")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendprec() {
|
||||||
|
c := make(chan bool, 1)
|
||||||
|
c <- false || true // not a syntax error: same as c <- (false || true)
|
||||||
|
if !<-c {
|
||||||
|
panic("sent false")
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user