| // 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" | |
| } |