delve/_fixtures/reflecttypefncall.go
Alessandro Arzilli be88f980cd
proc: fix escapeCheck infinite recursion if something can not be (#3311)
deref'd

Fix infinite recursion if escapeCheck, at some point during its
recursion, creates an unreadable variable.

The deeper reason for this is that we evaluate function calls in a very
weird order so that we can always have stack space to store
intermediate evaluation results.
The variable 'value' happens to be stored in a register when we try to
make the call and because of our weird evaluation strategy registers
are no longer available to us when we evaluate 'value'.

This is not a complete fix for the issue, the real fix would be to
evaluate everything in its natural order, storing intermediate values
in Delve's memory instead of the target's stack. To do this we need a
mechanism to pin heap allocated objects, which at the moment does not
exist.

Updates #3310
2023-03-27 11:21:01 -07:00

17 lines
197 B
Go

package main
import (
"fmt"
"reflect"
)
func reflectFunc(value reflect.Value) {
fmt.Printf("%s\n", value.Type().Name())
}
func main() {
i := 2
val := reflect.ValueOf(i)
reflectFunc(val)
}