1
0
mirror of https://github.com/golang/go synced 2024-11-22 03:14:41 -07:00

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
This commit is contained in:
Rémy Oudompheng 2011-12-07 16:18:50 -05:00 committed by Russ Cox
parent 9d52fe22b4
commit 4349effb15
4 changed files with 30 additions and 4 deletions

View File

@ -842,8 +842,12 @@ unary:
} }
ret: ret:
norig = n->orig; if(n == n->orig) {
// rewrite n in place. // duplicate node for n->orig.
norig = nod(OLITERAL, N, N);
*norig = *n;
} else
norig = n->orig;
*n = *nl; *n = *nl;
// restore value of n->orig. // restore value of n->orig.
n->orig = norig; n->orig = norig;

View File

@ -94,8 +94,10 @@ ret:
val.u.xval = mal(sizeof(*n->val.u.xval)); val.u.xval = mal(sizeof(*n->val.u.xval));
mpmovecfix(val.u.xval, v); mpmovecfix(val.u.xval, v);
n = nod(OLITERAL, N, N); n = nod(OLITERAL, N, N);
n->orig = nn;
n->val = val; n->val = val;
n->type = types[TUINTPTR]; n->type = types[TUINTPTR];
nn->type = types[TUINTPTR];
return n; return n;
} }

View File

@ -7,12 +7,12 @@
// Issue 2452. // Issue 2452.
// Check that the error messages says // Check that the error messages says
// bug378.go:17: 3 not used // bug378.go:17: 1 + 2 not used
// and not // and not
// bug378.go:17: 1 not used // bug378.go:17: 1 not used
package main package main
func 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"
} }

20
test/fixedbugs/bug381.go Normal file
View File

@ -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"
}