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 | 10 +++++----- test/fixedbugs/issue6964.go | 2 +- test/fixedbugs/issue9076.go | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 6 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 ce736766558..5ad607e04eb 100644 --- a/src/cmd/internal/gc/fmt.go +++ b/src/cmd/internal/gc/fmt.go @@ -1261,16 +1261,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 { + var f string + f += exprfmt(n.Orig, prec) + return f + } if fmtmode == FErr && n.Sym != nil { var f string f += fmt.Sprintf("%v", Sconv(n.Sym, 0)) return f } - if n.Val.Ctype == CTNIL && n.Orig != nil && n.Orig != n { - var f string - f += exprfmt(n.Orig, prec) - return f - } if n.Type != nil && n.Type != Types[n.Type.Etype] && n.Type != idealbool && n.Type != idealstring { // Need parens when type begins with what might // be misinterpreted as a unary operator: * or <-. diff --git a/test/fixedbugs/issue6964.go b/test/fixedbugs/issue6964.go index 821735c082b..8f4b60db3ce 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 00000000000..ad1cd5db0c6 --- /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"