]> Cypherpunks repositories - gostls13.git/commitdiff
gc: keep pointer to original node in constant rewrites.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Wed, 7 Dec 2011 21:18:50 +0000 (16:18 -0500)
committerRuss Cox <rsc@golang.org>
Wed, 7 Dec 2011 21:18:50 +0000 (16:18 -0500)
This allows printing meaningful expressions in error messages
instead of evaluated constants.
Fixes #2276.

R=golang-dev, rsc
CC=golang-dev, remy
https://golang.org/cl/5432082

src/cmd/gc/const.c
src/cmd/gc/unsafe.c
test/fixedbugs/bug379.go
test/fixedbugs/bug381.go [new file with mode: 0644]

index 96abf1a6550bf43cfdb393d22356e719c8c8fbf9..dd4c4433be6d26205779793ca0836614efa4f325 100644 (file)
@@ -842,8 +842,12 @@ unary:
        }
 
 ret:
-       norig = n->orig;
-       // rewrite n in place.
+       if(n == n->orig) {
+               // duplicate node for n->orig.
+               norig = nod(OLITERAL, N, N);
+               *norig = *n;
+       } else
+               norig = n->orig;
        *n = *nl;
        // restore value of n->orig.
        n->orig = norig;
index 21496b08cc44601aa8cf85ddec25904b597ef763..95200ad415e41b475ee1d529c420c8020d0366e7 100644 (file)
@@ -94,8 +94,10 @@ ret:
        val.u.xval = mal(sizeof(*n->val.u.xval));
        mpmovecfix(val.u.xval, v);
        n = nod(OLITERAL, N, N);
+       n->orig = nn;
        n->val = val;
        n->type = types[TUINTPTR];
+       nn->type = types[TUINTPTR];
        return n;
 }
 
index 9b93578e53eec745d350196b815c79d03c497fd5..3dd3d2983bd0869130cad19cbdc35e84c1df75de 100644 (file)
@@ -7,12 +7,12 @@
 // Issue 2452.
 
 // Check that the error messages says 
-//     bug378.go:17: 3 not used
+//     bug378.go:17: 1 + 2 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"
+       1 + 2 // ERROR "1 \+ 2 not used|value computed is not used"
 }
diff --git a/test/fixedbugs/bug381.go b/test/fixedbugs/bug381.go
new file mode 100644 (file)
index 0000000..3f3232b
--- /dev/null
@@ -0,0 +1,20 @@
+// 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 2276.
+
+// Check that the error messages says 
+//     bug378.go:19: unsafe.Alignof(0) not used
+// and not
+//     bug378.go:19: 4 not used
+
+package main
+
+import "unsafe"
+
+func main() {
+       unsafe.Alignof(0) // ERROR "unsafe\.Alignof|value computed is not used"
+}