]> Cypherpunks repositories - gostls13.git/commitdiff
gc: don't inherit orig from subnodes in constant expression nodes.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Mon, 28 Nov 2011 17:22:15 +0000 (12:22 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 28 Nov 2011 17:22:15 +0000 (12:22 -0500)
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
test/fixedbugs/bug379.go [new file with mode: 0644]

index 055f856d179815263b2a0697142322dc2d9cb3fc..96abf1a6550bf43cfdb393d22356e719c8c8fbf9 100644 (file)
@@ -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 (file)
index 0000000..9b93578
--- /dev/null
@@ -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"
+}