fallthrough
case PPARAM, PPARAMOUT:
p := Gins(obj.ATYPE, n, nil)
+ p.From.Sym = obj.Linklookup(Ctxt, n.Sym.Name, 0)
p.To.Type = obj.TYPE_MEM
p.To.Name = obj.NAME_EXTERN
p.To.Sym = Linksym(ngotype(n))
}
names[n] = true
- // Drop the package prefix from locals and arguments.
- if i := strings.LastIndex(n, "."); i >= 0 {
- n = n[i+1:]
- }
-
Uleb128put(ctxt, s, int64(v.Abbrev))
putattr(ctxt, s, v.Abbrev, DW_FORM_string, DW_CLS_STRING, int64(len(n)), n)
loc := append(encbuf[:0], DW_OP_call_frame_cfa)
const helloSource = `
package main
import "fmt"
+var gslice []string
func main() {
mapvar := make(map[string]string,5)
mapvar["abc"] = "def"
mapvar["ghi"] = "jkl"
strvar := "abc"
ptrvar := &strvar
- fmt.Println("hi") // line 10
+ slicevar := make([]string, 0, 16)
+ slicevar = append(slicevar, mapvar["abc"])
+ fmt.Println("hi") // line 12
_ = ptrvar
+ gslice = slicevar
}
`
"-ex", "echo BEGIN print strvar\n",
"-ex", "print strvar",
"-ex", "echo END\n",
+ "-ex", "echo BEGIN info locals\n",
+ "-ex", "info locals",
+ "-ex", "echo END\n",
"-ex", "down", // back to fmt.Println (goroutine 2 below only works at bottom of stack. TODO: fix that)
"-ex", "echo BEGIN goroutine 2 bt\n",
"-ex", "goroutine 2 bt",
t.Fatalf("print strvar failed: %s", bl)
}
+ // Issue 16338: ssa decompose phase can split a structure into
+ // a collection of scalar vars holding the fields. In such cases
+ // the DWARF variable location expression should be of the
+ // form "var.field" and not just "field".
+ infoLocalsRe := regexp.MustCompile(`^slicevar.len = `)
+ if bl := blocks["info locals"]; !infoLocalsRe.MatchString(bl) {
+ t.Fatalf("info locals failed: %s", bl)
+ }
+
btGoroutineRe := regexp.MustCompile(`^#0\s+runtime.+at`)
if bl := blocks["goroutine 2 bt"]; !btGoroutineRe.MatchString(bl) {
t.Fatalf("goroutine 2 bt failed: %s", bl)