|  | // errorcheck -0 -m | 
|  |  | 
|  | // Copyright 2018 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 23521: improve early DCE for if without explicit else. | 
|  |  | 
|  | package p | 
|  |  | 
|  | //go:noinline | 
|  | func nonleaf() {} | 
|  |  | 
|  | const truth = true | 
|  |  | 
|  | func f() int { // ERROR "can inline f" | 
|  | if truth { | 
|  | return 0 | 
|  | } | 
|  | // If everything below is removed, as it should, | 
|  | // function f should be inlineable. | 
|  | nonleaf() | 
|  | for { | 
|  | panic("") | 
|  | } | 
|  | } | 
|  |  | 
|  | func g() int { // ERROR "can inline g" | 
|  | return f() // ERROR "inlining call to f" | 
|  | } | 
|  |  | 
|  | func f2() int { // ERROR "can inline f2" | 
|  | if !truth { | 
|  | nonleaf() | 
|  | } else { | 
|  | return 0 | 
|  | } | 
|  | panic("") | 
|  | } | 
|  |  | 
|  | func g2() int { // ERROR "can inline g2" | 
|  | return f2() // ERROR "inlining call to f2" | 
|  | } |