summaryrefslogtreecommitdiffstats
path: root/test/fixedbugs/issue42284.dir/a.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixedbugs/issue42284.dir/a.go')
-rw-r--r--test/fixedbugs/issue42284.dir/a.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/fixedbugs/issue42284.dir/a.go b/test/fixedbugs/issue42284.dir/a.go
new file mode 100644
index 0000000..f7fd80b
--- /dev/null
+++ b/test/fixedbugs/issue42284.dir/a.go
@@ -0,0 +1,30 @@
+// Copyright 2020 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 a
+
+type I interface{ M() }
+type T int
+
+func (T) M() {} // ERROR "can inline T.M"
+
+func E() I { // ERROR "can inline E"
+ return T(0) // ERROR "T\(0\) escapes to heap"
+}
+
+func F(i I) I { // ERROR "can inline F" "leaking param: i to result ~r0 level=0"
+ i = nil
+ return i
+}
+
+func g() {
+ h := E() // ERROR "inlining call to E" "T\(0\) does not escape"
+ h.M() // ERROR "devirtualizing h.M to T"
+
+ // BAD: T(0) could be stack allocated.
+ i := F(T(0)) // ERROR "inlining call to F" "T\(0\) escapes to heap"
+
+ // Testing that we do NOT devirtualize here:
+ i.M()
+}