diff --git a/src/cmd/gc/const.c b/src/cmd/gc/const.c index 055f856d179815263b2a0697142322dc2d9cb3fc..96abf1a6550bf43cfdb393d22356e719c8c8fbf9 100644 --- a/src/cmd/gc/const.c +++ b/src/cmd/gc/const.c @@ -424,7 +424,7 @@ isconst(Node *n, int ct) void evconst(Node *n) { - Node *nl, *nr; + Node *nl, *nr, *norig; int32 len; Strlit *str; int wl, wr, lno, et; @@ -842,8 +842,11 @@ unary: } ret: + norig = n->orig; // rewrite n in place. *n = *nl; + // restore value of n->orig. + n->orig = norig; n->val = v; // check range. diff --git a/test/fixedbugs/bug379.go b/test/fixedbugs/bug379.go new file mode 100644 index 0000000000000000000000000000000000000000..9b93578e53eec745d350196b815c79d03c497fd5 --- /dev/null +++ b/test/fixedbugs/bug379.go @@ -0,0 +1,18 @@ +// 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 2452. + +// Check that the error messages says +// bug378.go:17: 3 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" +}