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
9package p
10
11//go:noinline
12func nonleaf() {}
13
14const truth = true
15
16func 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
28func g() int { // ERROR "can inline g"
29	return f() // ERROR "inlining call to f"
30}
31
32func f2() int { // ERROR "can inline f2"
33	if !truth {
34		nonleaf()
35	} else {
36		return 0
37	}
38	panic("")
39}
40
41func g2() int { // ERROR "can inline g2"
42	return f2() // ERROR "inlining call to f2"
43}
44