gc: keep pointer to original node in constant rewrites.

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
diff --git a/test/fixedbugs/bug379.go b/test/fixedbugs/bug379.go
index 9b93578..3dd3d29 100644
--- a/test/fixedbugs/bug379.go
+++ b/test/fixedbugs/bug379.go
@@ -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
index 0000000..3f3232b
--- /dev/null
+++ b/test/fixedbugs/bug381.go
@@ -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"
+}