From c7e1453e3da5ca2550bb780d1cea43e5d05af3ec Mon Sep 17 00:00:00 2001 From: Chris Manghane Date: Tue, 9 Dec 2014 06:52:17 -0800 Subject: [PATCH] cmd/internal/gc: do not show computed value in type error Fixes #9076. Change-Id: Ib41a452fa9aa9fecf19f65c36d13715923548041 Reviewed-on: https://go-review.googlesource.com/1250 Reviewed-by: Minux Ma Reviewed-by: Russ Cox Run-TryBot: Chris Manghane TryBot-Result: Gobot Gobot --- src/cmd/internal/gc/fmt.go | 8 ++++---- test/fixedbugs/issue6964.go | 2 +- test/fixedbugs/issue9076.go | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 test/fixedbugs/issue9076.go diff --git a/src/cmd/internal/gc/fmt.go b/src/cmd/internal/gc/fmt.go index ce73676655..5ad607e04e 100644 --- a/src/cmd/internal/gc/fmt.go +++ b/src/cmd/internal/gc/fmt.go @@ -1261,14 +1261,14 @@ func exprfmt(n *Node, prec int) string { return f case OLITERAL: // this is a bit of a mess - if fmtmode == FErr && n.Sym != nil { + if n.Orig != nil && n.Orig != n { var f string - f += fmt.Sprintf("%v", Sconv(n.Sym, 0)) + f += exprfmt(n.Orig, prec) return f } - if n.Val.Ctype == CTNIL && n.Orig != nil && n.Orig != n { + if fmtmode == FErr && n.Sym != nil { var f string - f += exprfmt(n.Orig, prec) + f += fmt.Sprintf("%v", Sconv(n.Sym, 0)) return f } if n.Type != nil && n.Type != Types[n.Type.Etype] && n.Type != idealbool && n.Type != idealstring { diff --git a/test/fixedbugs/issue6964.go b/test/fixedbugs/issue6964.go index 821735c082..8f4b60db3c 100644 --- a/test/fixedbugs/issue6964.go +++ b/test/fixedbugs/issue6964.go @@ -7,5 +7,5 @@ package main func main() { - _ = string(-4 + 2i + 2) // ERROR "-4\+2i" + _ = string(-4 + 2i + 2) // ERROR "-4 \+ 2i" } diff --git a/test/fixedbugs/issue9076.go b/test/fixedbugs/issue9076.go new file mode 100644 index 0000000000..ad1cd5db0c --- /dev/null +++ b/test/fixedbugs/issue9076.go @@ -0,0 +1,15 @@ +// errorcheck + +// Copyright 2014 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 9076: cmd/gc shows computed values in error messages instead of original expression. + +package main + +import "unsafe" + +const Hundred = 100 +var _ int32 = 100/unsafe.Sizeof(int(0)) + 1 // GC_ERROR "100 \/ unsafe.Sizeof\(int\(0\)\) \+ 1" +var _ int32 = Hundred/unsafe.Sizeof(int(0)) + 1 // GC_ERROR "Hundred \/ unsafe.Sizeof\(int\(0\)\) \+ 1" -- 2.48.1