]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/internal/gc: do not show original expression for constants in export data
authorShenghou Ma <minux@golang.org>
Wed, 4 Mar 2015 04:28:00 +0000 (23:28 -0500)
committerMinux Ma <minux@golang.org>
Thu, 5 Mar 2015 03:40:42 +0000 (03:40 +0000)
Fixes #10066.

Change-Id: I43c423793dd094989e921e163a06b12181a35719
Signed-off-by: Shenghou Ma <minux@golang.org>
Reviewed-on: https://go-review.googlesource.com/6750
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Chris Manghane <cmang@golang.org>
src/cmd/internal/gc/fmt.go
test/fixedbugs/issue10066.dir/a.go [new file with mode: 0644]
test/fixedbugs/issue10066.dir/b.go [new file with mode: 0644]
test/fixedbugs/issue10066.go [new file with mode: 0644]

index 99aad0c785f66d1da645999351e8f09b6cc0c3cd..46b02f7b1f3412c72d4aa2efc792c4c8449f9c48 100644 (file)
@@ -1143,11 +1143,16 @@ func exprfmt(n *Node, prec int) string {
                return f
 
        case OLITERAL: // this is a bit of a mess
-               if n.Orig != nil && n.Orig != n {
-                       return exprfmt(n.Orig, prec)
+               if fmtmode == FErr {
+                       if n.Orig != nil && n.Orig != n {
+                               return exprfmt(n.Orig, prec)
+                       }
+                       if n.Sym != nil {
+                               return fmt.Sprintf("%v", Sconv(n.Sym, 0))
+                       }
                }
-               if fmtmode == FErr && n.Sym != nil {
-                       return fmt.Sprintf("%v", Sconv(n.Sym, 0))
+               if n.Val.Ctype == CTNIL && n.Orig != nil && n.Orig != n {
+                       return exprfmt(n.Orig, prec)
                }
                if n.Type != nil && n.Type != Types[n.Type.Etype] && n.Type != idealbool && n.Type != idealstring {
                        // Need parens when type begins with what might
diff --git a/test/fixedbugs/issue10066.dir/a.go b/test/fixedbugs/issue10066.dir/a.go
new file mode 100644 (file)
index 0000000..8bb3b30
--- /dev/null
@@ -0,0 +1,11 @@
+package a
+
+import "log"
+
+func Do() {
+       Do2()
+}
+
+func Do2() {
+       println(log.Ldate | log.Ltime | log.Lshortfile)
+}
diff --git a/test/fixedbugs/issue10066.dir/b.go b/test/fixedbugs/issue10066.dir/b.go
new file mode 100644 (file)
index 0000000..46d2f55
--- /dev/null
@@ -0,0 +1,7 @@
+package b
+
+import "./a"
+
+func test() {
+       a.Do()
+}
diff --git a/test/fixedbugs/issue10066.go b/test/fixedbugs/issue10066.go
new file mode 100644 (file)
index 0000000..3ea552f
--- /dev/null
@@ -0,0 +1,10 @@
+// compiledir
+
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Issue 10066: constants are printed in the original form
+// in export data. This is the opposite of issue 9076.
+
+package ignored