func dumpGlobalConst(n *Node) {
// only export typed constants
- if n.Type == nil {
+ t := n.Type
+ if t == nil {
return
}
if n.Sym.Pkg != localpkg {
return
}
// only export integer constants for now
- switch n.Type.Etype {
+ switch t.Etype {
case TINT8:
case TINT16:
case TINT32:
case TUINT:
case TUINTPTR:
// ok
+ case TIDEAL:
+ if !Isconst(n, CTINT) {
+ return
+ }
+ x := n.Val().U.(*Mpint)
+ if x.Cmp(minintval[TINT]) < 0 || x.Cmp(maxintval[TINT]) > 0 {
+ return
+ }
+ // Ideal integers we export as int (if they fit).
+ t = types.Types[TINT]
default:
return
}
- Ctxt.DwarfIntConst(myimportpath, n.Sym.Name, typesymname(n.Type), n.Int64())
+ Ctxt.DwarfIntConst(myimportpath, n.Sym.Name, typesymname(t), n.Int64())
}
func dumpglobls() {
"-ex", "print main.largeConstant",
"-ex", "print main.minusOne",
"-ex", "print 'runtime._MSpanInUse'",
+ "-ex", "print 'runtime._PageSize'",
filepath.Join(dir, "a.exe"),
}
got, _ := exec.Command("gdb", args...).CombinedOutput()
t.Logf("output %q", sgot)
- if !strings.Contains(sgot, "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'") {
+ if !strings.Contains(sgot, "\n$1 = 42\n$2 = 18446744073709551615\n$3 = -1\n$4 = 1 '\\001'\n$5 = 8192") {
t.Fatalf("output mismatch")
}
}