]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: fix inlining bug with receive operator.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Tue, 31 Jul 2012 22:45:26 +0000 (00:45 +0200)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Tue, 31 Jul 2012 22:45:26 +0000 (00:45 +0200)
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

src/cmd/gc/fmt.c
test/fixedbugs/bug448.dir/pkg1.go [new file with mode: 0644]
test/fixedbugs/bug448.dir/pkg2.go [new file with mode: 0644]
test/fixedbugs/bug448.go [new file with mode: 0644]

index 2ac28846ac0ff18b51ccb4cbca26b453dd563425..c59d1b9fcd2024def99ee6a55a82afd9188373d4 100644 (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,
diff --git a/test/fixedbugs/bug448.dir/pkg1.go b/test/fixedbugs/bug448.dir/pkg1.go
new file mode 100644 (file)
index 0000000..032e5d9
--- /dev/null
@@ -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)
+}
diff --git a/test/fixedbugs/bug448.dir/pkg2.go b/test/fixedbugs/bug448.dir/pkg2.go
new file mode 100644 (file)
index 0000000..5c78c7d
--- /dev/null
@@ -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()
+}
+
diff --git a/test/fixedbugs/bug448.go b/test/fixedbugs/bug448.go
new file mode 100644 (file)
index 0000000..242f599
--- /dev/null
@@ -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