mirror of
https://github.com/golang/go
synced 2024-11-22 08:44: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:
parent
9d52fe22b4
commit
4349effb15
@ -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;
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
20
test/fixedbugs/bug381.go
Normal 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"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user