Source file test/fixedbugs/issue42284.dir/a.go

     1  // Copyright 2020 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package a
     6  
     7  type I interface{ M() }
     8  type T int
     9  
    10  func (T) M() {} // ERROR "can inline T.M"
    11  
    12  func E() I { // ERROR "can inline E"
    13  	return T(0) // ERROR "T\(0\) escapes to heap"
    14  }
    15  
    16  func F(i I) I { // ERROR "can inline F" "leaking param: i to result ~r0 level=0"
    17  	i = nil
    18  	return i
    19  }
    20  
    21  func g() {
    22  	h := E() // ERROR "inlining call to E" "T\(0\) does not escape"
    23  	h.M()    // ERROR "devirtualizing h.M to T" "inlining call to T.M"
    24  
    25  	// BAD: T(0) could be stack allocated.
    26  	i := F(T(0)) // ERROR "inlining call to F" "T\(0\) escapes to heap"
    27  
    28  	// Testing that we do NOT devirtualize here:
    29  	i.M()
    30  }
    31  

View as plain text