Source file test/fixedbugs/issue23521.go

     1  // errorcheck -0 -m
     2  
     3  // Copyright 2018 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  // Issue 23521: improve early DCE for if without explicit else.
     8  
     9  package p
    10  
    11  //go:noinline
    12  func nonleaf() {}
    13  
    14  const truth = true
    15  
    16  func f() int { // ERROR "can inline f"
    17  	if truth {
    18  		return 0
    19  	}
    20  	// If everything below is removed, as it should,
    21  	// function f should be inlineable.
    22  	nonleaf()
    23  	for {
    24  		panic("")
    25  	}
    26  }
    27  
    28  func g() int { // ERROR "can inline g"
    29  	return f() // ERROR "inlining call to f"
    30  }
    31  
    32  func f2() int { // ERROR "can inline f2"
    33  	if !truth {
    34  		nonleaf()
    35  	} else {
    36  		return 0
    37  	}
    38  	panic("")
    39  }
    40  
    41  func g2() int { // ERROR "can inline g2"
    42  	return f2() // ERROR "inlining call to f2"
    43  }
    44  

View as plain text