From 60e4a61d307c0e6c32d1933fbf14cf59193349ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Oudompheng?= Date: Mon, 28 Nov 2011 12:22:15 -0500 Subject: [PATCH] gc: don't inherit orig from subnodes in constant expression nodes. The wrong value made Nconv() show "1" for node "-1", and "2" from node "2+3". Fixes #2452. R=gri, lvd, rsc CC=golang-dev, remy https://golang.org/cl/5435064 --- src/cmd/gc/const.c | 5 ++++- test/fixedbugs/bug379.go | 18 ++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/fixedbugs/bug379.go diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index 055f856d179..96abf1a6550 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -424,7 +424,7 @@ isconst(Node *n, int ct) void evconst(Node *n) { - Node *nl, *nr; + Node *nl, *nr, *norig; int32 len; Strlit *str; int wl, wr, lno, et; @@ -842,8 +842,11 @@ unary: } ret: + norig = n->orig; // rewrite n in place. *n = *nl; + // restore value of n->orig. + n->orig = norig; n->val = v; // check range. diff --git a/test/fixedbugs/bug379.go b/test/fixedbugs/bug379.go new file mode 100644 index 00000000000..9b93578e53e --- /dev/null +++ b/test/fixedbugs/bug379.go @@ -0,0 +1,18 @@ +// errchk $G $D/$F.go + +// Copyright 2011 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 2452. + +// Check that the error messages says +// bug378.go:17: 3 not used +// and not +// bug378.go:17: 1 not used + +package main + +func main() { + 1 + 2 // ERROR "3 not used|value computed is not used" +}