mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-03 10:37:46 +00:00
f8876ea245
This hack was originally introduced in https://github.com/tinygo-org/tinygo/pull/251 to fix an escape analysis regression after https://github.com/tinygo-org/tinygo/pull/222 introduced nil checks. Since a new optimization in LLVM (see https://reviews.llvm.org/D60047) this hack is not necessary anymore and can be removed. I've compared all regular tests and smoke tests before and after to check the size. In most cases this change was an improvement although there are a few regressions.
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package runtime
|
|
|
|
// trap is a compiler hint that this function cannot be executed. It is
|
|
// translated into either a trap instruction or a call to abort().
|
|
//go:export llvm.trap
|
|
func trap()
|
|
|
|
// Builtin function panic(msg), used as a compiler intrinsic.
|
|
func _panic(message interface{}) {
|
|
printstring("panic: ")
|
|
printitf(message)
|
|
printnl()
|
|
abort()
|
|
}
|
|
|
|
// Cause a runtime panic, which is (currently) always a string.
|
|
func runtimePanic(msg string) {
|
|
printstring("panic: runtime error: ")
|
|
println(msg)
|
|
abort()
|
|
}
|
|
|
|
// Try to recover a panicking goroutine.
|
|
func _recover() interface{} {
|
|
// Deferred functions are currently not executed during panic, so there is
|
|
// no way this can return anything besides nil.
|
|
return nil
|
|
}
|
|
|
|
// Panic when trying to dereference a nil pointer.
|
|
func nilPanic() {
|
|
runtimePanic("nil pointer dereference")
|
|
}
|
|
|
|
// Panic when trying to acces an array or slice out of bounds.
|
|
func lookupPanic() {
|
|
runtimePanic("index out of range")
|
|
}
|
|
|
|
// Panic when trying to slice a slice out of bounds.
|
|
func slicePanic() {
|
|
runtimePanic("slice out of range")
|
|
}
|
|
|
|
// Panic when trying to create a new channel that is too big.
|
|
func chanMakePanic() {
|
|
runtimePanic("new channel is too big")
|
|
}
|
|
|
|
func blockingPanic() {
|
|
runtimePanic("trying to do blocking operation in exported function")
|
|
}
|