cmd/compile: suppress export of Note field within exported bodies

Added a format option to inhibit output of .Note field in
printing, and enabled that option during export.
Added test.

Fixes #13777.

Change-Id: I739f9785eb040f2fecbeb96d5a9ceb8c1ca0f772
Reviewed-on: https://go-review.googlesource.com/18217
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: David Chase <drchase@google.com>
This commit is contained in:
David Chase 2015-12-30 19:47:36 -05:00
parent d731315cdb
commit ab5d2bf92f
6 changed files with 59 additions and 10 deletions

View file

@ -63,6 +63,8 @@ var fmtmode int = FErr
var fmtpkgpfx int // %uT stickyness
var fmtbody bool
//
// E.g. for %S: %+S %#S %-S print an identifier properly qualified for debug/export/internal mode.
//
@ -87,8 +89,9 @@ var fmtpkgpfx int // %uT stickyness
// %-uT type identifiers with package name instead of prefix (typesym, dcommontype, typehash)
//
func setfmode(flags *int) int {
fm := fmtmode
func setfmode(flags *int) (fm int, fb bool) {
fm = fmtmode
fb = fmtbody
if *flags&obj.FmtSign != 0 {
fmtmode = FDbg
} else if *flags&obj.FmtSharp != 0 {
@ -97,8 +100,12 @@ func setfmode(flags *int) int {
fmtmode = FTypeId
}
*flags &^= (obj.FmtSharp | obj.FmtLeft | obj.FmtSign)
return fm
if *flags&obj.FmtBody != 0 {
fmtbody = true
}
*flags &^= (obj.FmtSharp | obj.FmtLeft | obj.FmtSign | obj.FmtBody)
return
}
// Fmt "%L": Linenumbers
@ -741,7 +748,7 @@ func typefmt(t *Type, flag int) string {
if name != "" {
str = name + " " + typ
}
if flag&obj.FmtShort == 0 && t.Note != nil {
if flag&obj.FmtShort == 0 && !fmtbody && t.Note != nil {
str += " " + strconv.Quote(*t.Note)
}
return str
@ -1599,10 +1606,11 @@ func Sconv(s *Sym, flag int) string {
}
sf := flag
sm := setfmode(&flag)
sm, sb := setfmode(&flag)
str := symfmt(s, flag)
flag = sf
fmtmode = sm
fmtbody = sb
return str
}
@ -1625,7 +1633,7 @@ func Tconv(t *Type, flag int) string {
t.Trecur++
sf := flag
sm := setfmode(&flag)
sm, sb := setfmode(&flag)
if fmtmode == FTypeId && (sf&obj.FmtUnsigned != 0) {
fmtpkgpfx++
@ -1641,6 +1649,7 @@ func Tconv(t *Type, flag int) string {
}
flag = sf
fmtbody = sb
fmtmode = sm
t.Trecur--
return str
@ -1658,7 +1667,7 @@ func Nconv(n *Node, flag int) string {
return "<N>"
}
sf := flag
sm := setfmode(&flag)
sm, sb := setfmode(&flag)
var str string
switch fmtmode {
@ -1675,6 +1684,7 @@ func Nconv(n *Node, flag int) string {
}
flag = sf
fmtbody = sb
fmtmode = sm
return str
}
@ -1691,7 +1701,7 @@ func Hconv(l *NodeList, flag int) string {
}
sf := flag
sm := setfmode(&flag)
sm, sb := setfmode(&flag)
sep := "; "
if fmtmode == FDbg {
sep = "\n"
@ -1708,6 +1718,7 @@ func Hconv(l *NodeList, flag int) string {
}
flag = sf
fmtbody = sb
fmtmode = sm
return buf.String()
}