Commit f4dfbd1c authored by Robert Griesemer's avatar Robert Griesemer

channel types parsed not according to spec by 6g

R=r, rsc
CC=golang-dev
https://golang.org/cl/193101
parent 3884f732
// errchk $G $D/$F.go
// Copyright 2009 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 main
var c1 chan<- chan int
var c2 chan<- (chan int) // same type as c1 according to gccgo, gofmt
var c3 chan (<-chan int) // same type as c1 according to 6g
func main() {
c1 = c2 // this should be ok, bug 6g doesn't accept it
c1 = c3 // ERROR "chan"
}
/*
Channel types are parsed differently by 6g then by gccgo and gofmt.
The channel type specification ( http://golang.org/doc/go_spec.html#Channel_types )
says that a channel type is either
chan ElementType
chan <- ElementType
<-chan ElementType
which indicates that the <- binds to the chan token (not to the ElementType).
So:
chan <- chan int
should be parsed as
chan<- (chan int)
Both gccgo and gofmt adhere to this, while 6g parses this as
chan (<-chan int)
*/
......@@ -154,3 +154,10 @@ BUG: tuple evaluation order
bugs/bug246.go:17: cannot convert 0 to type unsafe.Pointer
bugs/bug246.go:17: cannot convert 0 (type uintptr) to type *int in conversion
BUG: bug246
=========== bugs/bug249.go
BUG: errchk: bugs/bug249.go:15: missing expected error: 'chan'
errchk: bugs/bug249.go: unmatched error messages:
==================================================
bugs/bug249.go:14: cannot use c2 (type chan<- (chan int)) as type chan <-chan int in assignment
==================================================
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment