aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémy Oudompheng <oudomphe@phare.normalesup.org>2011-11-28 12:22:15 -0500
committerRuss Cox <rsc@golang.org>2011-11-28 12:22:15 -0500
commit60e4a61d307c0e6c32d1933fbf14cf59193349ab (patch)
tree3accb64ea8a173c654715d2ff52415518219dada
parentce7e11997b9706aa3e0c2aa284470b8e8c11b86c (diff)
downloadgo-60e4a61d307c0e6c32d1933fbf14cf59193349ab.tar.gz
go-60e4a61d307c0e6c32d1933fbf14cf59193349ab.zip
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
-rw-r--r--src/cmd/gc/const.c5
-rw-r--r--test/fixedbugs/bug379.go18
2 files changed, 22 insertions, 1 deletions
diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c
index 055f856d17..96abf1a655 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 0000000000..9b93578e53
--- /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"
+}