]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/gc: disable inlining of method values
authorDaniel Morsing <daniel.morsing@gmail.com>
Sat, 13 Apr 2013 06:22:16 +0000 (08:22 +0200)
committerDaniel Morsing <daniel.morsing@gmail.com>
Sat, 13 Apr 2013 06:22:16 +0000 (08:22 +0200)
They caused internal compiler errors and they're expensive enough that inlining them doesn't make sense.

Fixes #5259.

R=golang-dev, r, iant, remyoudompheng
CC=golang-dev
https://golang.org/cl/8636043

src/cmd/gc/inl.c
test/fixedbugs/issue5259.dir/bug.go [new file with mode: 0644]
test/fixedbugs/issue5259.dir/main.go [new file with mode: 0644]
test/fixedbugs/issue5259.go [new file with mode: 0644]

index 850bb36ec712673246bdb6c772473531d661c0d0..f77b51d707677c466530dc55da623f4bd1030fbe 100644 (file)
@@ -188,6 +188,7 @@ ishairy(Node *n, int *budget)
                break;
 
        case OCLOSURE:
+       case OCALLPART:
        case ORANGE:
        case OFOR:
        case OSELECT:
diff --git a/test/fixedbugs/issue5259.dir/bug.go b/test/fixedbugs/issue5259.dir/bug.go
new file mode 100644 (file)
index 0000000..8512461
--- /dev/null
@@ -0,0 +1,17 @@
+// Copyright 2013 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 bug
+
+type S struct {
+       F func()
+}
+
+type X interface {
+       Bar()
+}
+
+func Foo(x X) *S {
+       return &S{F: x.Bar}
+}
diff --git a/test/fixedbugs/issue5259.dir/main.go b/test/fixedbugs/issue5259.dir/main.go
new file mode 100644 (file)
index 0000000..ad1da78
--- /dev/null
@@ -0,0 +1,16 @@
+// Copyright 2013 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
+
+import "./bug"
+
+type foo int
+
+func (f *foo) Bar() {
+}
+
+func main() {
+       bug.Foo(new(foo))
+}
diff --git a/test/fixedbugs/issue5259.go b/test/fixedbugs/issue5259.go
new file mode 100644 (file)
index 0000000..00fe19f
--- /dev/null
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2013 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 5259: Inlining of method value causes internal compiler error
+
+package ignored