Commit 4349effb authored by Rémy Oudompheng's avatar Rémy Oudompheng Committed by Russ Cox

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
parent 9d52fe22
......@@ -842,8 +842,12 @@ unary:
}
ret:
if(n == n->orig) {
// duplicate node for n->orig.
norig = nod(OLITERAL, N, N);
*norig = *n;
} else
norig = n->orig;
// rewrite n in place.
*n = *nl;
// restore value of n->orig.
n->orig = norig;
......
......@@ -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;
}
......
......@@ -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"
}
// 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"
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment