cmd/gc: fix inlining bug with receive operator.

The receive operator was given incorrect precedence
resulting in incorrect deletion of parentheses.

Fixes #3843.

R=rsc
CC=golang-dev, remy
https://golang.org/cl/6442049
This commit is contained in:
Rémy Oudompheng 2012-08-01 00:45:26 +02:00
parent cbc3268d1d
commit b6ea905ed9
4 changed files with 33 additions and 1 deletions

View File

@ -964,7 +964,6 @@ static int opprec[] = {
[OPAREN] = 8,
[OPRINTN] = 8,
[OPRINT] = 8,
[ORECV] = 8,
[ORUNESTR] = 8,
[OSTRARRAYBYTE] = 8,
[OSTRARRAYRUNE] = 8,
@ -996,6 +995,7 @@ static int opprec[] = {
[OMINUS] = 7,
[OADDR] = 7,
[OIND] = 7,
[ORECV] = 7,
[OMUL] = 6,
[ODIV] = 6,

View File

@ -0,0 +1,11 @@
// Copyright 2012 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 pkg1
var x = make(chan interface{})
func Do() int {
return (<-x).(int)
}

View File

@ -0,0 +1,14 @@
// Copyright 2012 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 3843: inlining bug due to wrong receive operator precedence.
package pkg2
import "./pkg1"
func F() {
pkg1.Do()
}

7
test/fixedbugs/bug448.go Normal file
View File

@ -0,0 +1,7 @@
// compiledir
// Copyright 2012 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 ignored