diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go index 030bc2387e..fa591c5764 100644 --- a/src/pkg/go/printer/printer.go +++ b/src/pkg/go/printer/printer.go @@ -225,7 +225,14 @@ func (p *printer) writeString(pos token.Position, s string, isLit bool) { // (used when printing merged ASTs of different files // e.g., the result of ast.MergePackageFiles) if p.last.IsValid() && p.last.Filename != pos.Filename { - p.indent = 0 + // Note: Do not set p.indent to 0 - this seems to be a bad heuristic. + // ASTs may be created by various tools and built from nodes of + // different files. An incorrectly constructed AST will likely + // not print at all, but a (structurally) correct AST with bad + // position information should still print structurally correct. + // If p.indent is reset, indentation may be off, and likely lead + // to indentation underflow (to detect set: debug = true). + // See also issue 4300 (11/16/2012). p.mode = 0 p.wsbuf = p.wsbuf[0:0] }