Source file test/fixedbugs/issue52193.go

     1  // errorcheck -0 -m
     2  
     3  // Copyright 2023 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  package p
     8  
     9  import (
    10  	"crypto/ecdh"
    11  	"crypto/rand"
    12  )
    13  
    14  func F(peerShare []byte) ([]byte, error) { // ERROR "leaking param: peerShare"
    15  	p256 := ecdh.P256() // ERROR "inlining call to ecdh.P256"
    16  
    17  	ourKey, err := p256.GenerateKey(rand.Reader) // ERROR "devirtualizing p256.GenerateKey" "inlining call to ecdh.*GenerateKey"
    18  	if err != nil {
    19  		return nil, err
    20  	}
    21  
    22  	peerPublic, err := p256.NewPublicKey(peerShare) // ERROR "devirtualizing p256.NewPublicKey" "inlining call to ecdh.*NewPublicKey"
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	return ourKey.ECDH(peerPublic)
    28  }
    29  
    30  // Test that inlining doesn't break if devirtualization exposes a new
    31  // inlinable callee.
    32  
    33  func f() { // ERROR "can inline f"
    34  	var i interface{ m() } = T(0) // ERROR "T\(0\) does not escape"
    35  	i.m()                         // ERROR "devirtualizing i.m"
    36  }
    37  
    38  type T int
    39  
    40  func (T) m() { // ERROR "can inline T.m"
    41  	if never {
    42  		f() // ERROR "inlining call to f" "devirtualizing i.m" "T\(0\) does not escape"
    43  	}
    44  }
    45  
    46  var never bool
    47  

View as plain text