// errorcheck -0 -+ -p=runtime -m

// Copyright 2019 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.

package runtime

// A function that calls runtime.getcallerpc or runtime.getcallersp()
// cannot be inlined, no matter how small it is.

func getcallerpc() uintptr
func getcallersp() uintptr

func pc() uintptr {
	return getcallerpc() + 1
}

func cpc() uintptr { // ERROR "can inline cpc"
	return pc() + 2
}

func sp() uintptr {
	return getcallersp() + 3
}

func csp() uintptr { // ERROR "can inline csp"
	return sp() + 4
}
